vr has asked for the wisdom of the Perl Monks concerning the following question:
I thought that since
'aa' =~ /(.)\1/
there can be something like:
use 5.010; my @a = qw/a d/; $_ = '0a1d1y0z'; say s/(\d)${a[\1]}/xx/g; say;
And it'll say "2" and "xxxx1y0z", but of course it won't work.
I could capture each pair, and then decide on what to replace it with, in substitution part, with an "e" modifier. But I would like an "s" operator to return number of 'real' substitutions made.
I came up with
say s/(\d)([a-z])(?(?{ $2 ne $a[$1] })(*FAIL))/xx/g; say;
But it doesn't look very efficient nor pretty. Is there a better solution?
(In practice, there's not an array, but HoA, with keys being sub-matches and indices depending on external conditions. And matches are not simple pairs of characters, and strings are a little longer.)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Using sub-matches to interpolate hash keys (array indices)?
by Anonymous Monk on Jul 21, 2015 at 13:10 UTC | |
by vr (Curate) on Jul 21, 2015 at 16:17 UTC |