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