When it is executed with input abab produces this output:pl@nereida:~/Lperltesting$ cat ./offsetsin5_10.pl #!/usr/local/lib/perl/5.10.1/bin//perl5.10.1 use v5.10; my $input; local $" = ", "; my $parser = qr{ ^ ((?&expr)) ((?&expr)) \z (?{ say "main:\n\@- = (@-)\t\t ".scalar(@-)." items\n\@+ = (@ ++)\t ".scalar(@+)." items\n"; }) (?(DEFINE) (?<expr> (.) (.) (?{ say "expr:\n\@- = (@-)\t ".scalar(@-)." items\n\@+ = +(@+)\t ".scalar(@+)." items\n"; }) ) ) }x; $input = <>; chomp($input); if ($input =~ $parser) { say "matches: ($&)";
Observe how in the outside scope (main) the @- and @+ arrays have different lengths. It looks as if @+ must have length 3 but it has length 6 instead.pl@nereida:~/Lperltesting$ ./offsetsin5_10.pl abab expr: @- = (0, , , , 0, 1) 6 items @+ = (2, , , , 1, 2) 6 items expr: @- = (0, 0, , , 2, 3) 6 items @+ = (4, 2, , , 3, 4) 6 items main: @- = (0, 0, 2) 3 items @+ = (4, 2, 4, , , ) 6 items matches: (abab)
Am I doing something wrong or is it a bug?
In reply to Strange behavior of @- and @+ in perl5.10 regexps by casiano
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |