eff_i_g has asked for the wisdom of the Perl Monks concerning the following question:

Monks,

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:
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(\%+);
Output:
All accounted for: $VAR1 = { 'one' => [ '1' ], 'twelve' => [ '12' ], 'two' => [ '2' ] }; Here too: $VAR1 = [ '12', '1', '2' ]; Where are one and two? $VAR1 = { 'twelve' => '12' };

Replies are listed 'Best First'.
Re: Inconsistent captures in %+ and %-
by toolic (Bishop) on Oct 22, 2010 at 20:18 UTC
    I don't get the same output as you do. Here is what I get:
    All accounted for: $VAR1 = { 'one' => [ '1' ], 'twelve' => [ '12' ], 'two' => [ '2' ] }; Here too: $VAR1 = [ '12', '1', '2' ]; Where are one and two? $VAR1 = { 'one' => '1', 'twelve' => '12', 'two' => '2' };

    What version of perl are you using? I'm on v5.10.1, MSWin32-x86-multi-thread.

      Ah! Many thanks toolic! I'm "perl, v5.10.0 built for sun4-solaris."
        It must have been a bug which was subsequently fixed. I can reproduce your results with:
        This is perl, v5.10.0 built for x86_64-linux
        but not with:
        This is perl 5, version 12, subversion 0 (v5.12.0) built for x86_64-li +nux
        If you think you have found a bug in perl, always test it against the most recent version - it may have already been fixed (as in this case). 5.10.0 may look new and shiny to a lot of people, but it's just 2 months shy of being 3 years old. And 5.10.1, 5.12.0, 5.12.1, and 5.12.2 have been released since.
Re: Inconsistent captures in %+ and %-
by fod (Friar) on Oct 22, 2010 at 20:22 UTC
    I'm getting the same (as toolic) on v5.12.2