in reply to Re^2: Named Captures
in thread Named Captures
perl -wE"'abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)|(?<e>e)]g and do +{ say for keys %+ }" a
/g in scalar context matches once, %+ contains the first value, a.
perl -wE"()='abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)|(?<e>e)]g and + do{ say for keys %+ }" e
/g in list context matches all locations, and after having matched all, %+ contains the result of the last match, e.
perl -wE"my@a = 'abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)|(?<d>d)|(?<e>e)]g + and do{ say for keys %+ }" e
Same as above, except that you store the intermediate values.
perl -wE"my@a = 'abcde' =~ m[(?<a>a)|(?<b>b)|(?<c>c)]g and do{ say for + keys %+ }" ## big fat nothing?
You have removed [de] from the matching class. %+ is a global variable and it (seems it) is cleared by the last failing match.
It might or might not be nice to have %+ retain the value(s) of the last successful match, but maybe you can work around this by padding your RE with .*$re.* to convert it into a truely floating RE.
In Section
Seekers of Perl Wisdom