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
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