http://www.perlmonks.org?node_id=600444


in reply to How to get ($1, $2, ...)?

Perhaps this (without strict)?
@groups = grep defined, map $$_, 1..$last_capture

Replies are listed 'Best First'.
Re^2: How to get ($1, $2, ...)?
by bart (Canon) on Feb 16, 2007 at 19:29 UTC
    Please don't brainlessly use defined on the list of values of $1, $2 etc, because you're now throwing away information about which pairs of parens were involved in the actual match. Sometimes that's what you want, but usually, it's not.

    And eric256 has the right idea for using @- and/or @+ to find out how many paren pairs were involved.

    You could use these arrays, one item per array, together with substr to extract the matches without symbolic references, but then you'd have to know what variable the match was against, and it may not have been changed in the meantime, for example by using the regexp in s///g, which would foul up the result. So I think the symbolic references for the captures for a reasonably elegant approach.

Re^2: How to get ($1, $2, ...)?
by eric256 (Parson) on Feb 16, 2007 at 18:50 UTC
    my @groups; {no strict 'refs'; @groups = map $$_, 1..$#-;}

    Nice Educated_foo!

    Update: Removed use of grep, didn't notice it in there the first time ;)


    ___________
    Eric Hodges