diff options
author | Matthew Horsfall (alh) <wolfsage@gmail.com> | 2011-07-31 22:42:22 -0400 |
---|---|---|
committer | Father Chrysostomos <sprout@cpan.org> | 2011-08-02 14:32:10 -0700 |
commit | e958e573604ab75ea497030026663063af7f21a6 (patch) | |
tree | 99fd8d43881b71c5c6593ff449331e1ea42be9d1 /lib | |
parent | 706c19b7f8e3507cf277370f033ddc7c57499fdf (diff) | |
download | perl-e958e573604ab75ea497030026663063af7f21a6.tar.gz |
RT #94988 - Support for %u in diagnostics.pm's printf()-format parser
Diffstat (limited to 'lib')
-rw-r--r-- | lib/diagnostics.pm | 8 | ||||
-rw-r--r-- | lib/diagnostics.t | 9 |
2 files changed, 12 insertions, 5 deletions
diff --git a/lib/diagnostics.pm b/lib/diagnostics.pm index f2d542927a..60c96ea3ce 100644 --- a/lib/diagnostics.pm +++ b/lib/diagnostics.pm @@ -410,22 +410,22 @@ my %msg; # Since we strip "\.\n" when we search a warning, strip it here as well $header =~ s/\.?$//; - my @toks = split( /(%l?[dx]|%c|%(?:\.\d+)?[fs])/, $header ); + my @toks = split( /(%l?[dx]|%u|%c|%(?:\.\d+)?[fs])/, $header ); if (@toks > 1) { my $conlen = 0; for my $i (0..$#toks){ if( $i % 2 ){ if( $toks[$i] eq '%c' ){ $toks[$i] = '.'; - } elsif( $toks[$i] eq '%d' ){ + } elsif( $toks[$i] =~ /^%(?:d|u)$/ ){ $toks[$i] = '\d+'; } elsif( $toks[$i] =~ '^%(?:s|.*f)$' ){ $toks[$i] = $i == $#toks ? '.*' : '.*?'; } elsif( $toks[$i] =~ '%.(\d+)s' ){ $toks[$i] = ".{$1}"; - } elsif( $toks[$i] =~ '^%l*x$' ){ + } elsif( $toks[$i] =~ '^%l*x$' ){ $toks[$i] = '[\da-f]+'; - } + } } elsif( length( $toks[$i] ) ){ $toks[$i] = quotemeta $toks[$i]; $conlen += length( $toks[$i] ); diff --git a/lib/diagnostics.t b/lib/diagnostics.t index b5db34de74..31a5802c2b 100644 --- a/lib/diagnostics.t +++ b/lib/diagnostics.t @@ -5,7 +5,7 @@ BEGIN { @INC = 'lib'; } -use Test::More tests => 8; +use Test::More tests => 9; BEGIN { my $w; @@ -54,3 +54,10 @@ seek STDERR, 0,0; $warning = ''; warn "Execution of -e aborted due to compilation errors.\n"; like $warning, qr/The final summary message/, 'Periods at end of line'; + + +# Test for %d/%u +seek STDERR, 0,0; +$warning = ''; +warn "Bad arg length for us, is 4, should be 42"; +like $warning, qr/In C parlance/, '%u works'; |