Is there an easy way to get a list of all successful captures from a regex pre-5.10?

Posted by Chas. Owens on Stack Overflow See other posts from Stack Overflow or by Chas. Owens
Published on 2010-03-18T17:28:15Z Indexed on 2010/03/18 17:31 UTC
Read the original article Hit count: 419

Filed under:
|

I know the right way to do this if I have Perl 5.10 is to use named captures and values %+, but in Perl 5.8.9 and how can I get a list of successful captures? I have come up with two methods that are both just terrible:

#you need to list each possible match
my @captures = grep { defined } ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16);

and

#ew, I turned on symbolic references 
{
    no strict 'refs';
    my @captures = map { defined $+[$_] ? $$_ : () } 1 .. $#+;
}

There is a third option I have found involving (?{}), but it requires global variables (because the closure happens at compile time) and takes the regex from reasonably clear to ungodly mess.

The only alternative I have found is to capture the whole match and then use another set of regexes to get the values I want (actually I build the first regex out of the other regexes because there is no good reason to duplicate the logic).

© Stack Overflow or respective owner

Related posts about perl

Related posts about regex