According to the docs for %- and %+ they both allow "access to the named capture buffers, should they exist, in the last successful match" and they differ in that %- "associates a reference to an array containing the list of values captured by all buffers with that name (should there be several of them)" and %+ does not.
Yet, as seen below, %+ does not report all of the captures. Am I misunderstanding something or is this buggy behavior?
Code:Output:use Data::Dumper; '12' =~ / (?<twelve> (?<one>1) (?<two>2) ) /x; print "All accounted for:\n"; print Dumper(\%-); print "Here too:\n"; print Dumper([$1, $2, $3]); print "Where are one and two?\n"; print Dumper(\%+);
All accounted for: $VAR1 = { 'one' => [ '1' ], 'twelve' => [ '12' ], 'two' => [ '2' ] }; Here too: $VAR1 = [ '12', '1', '2' ]; Where are one and two? $VAR1 = { 'twelve' => '12' };
In reply to Inconsistent captures in %+ and %- by eff_i_g
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |