Yet another variant, which allows you to keep your original my @o.
The idea is to wrap a kind of "throw-away" subroutine around the push ... code. The subroutine is created anew every time the ?{...} code is being called.
sub foo { my $window = "a b X20 c X5 d e X17 X12"; my @o; my @m = ($window =~ m/(X\d+(?{(sub {push @o, @_})->(pos)}))/g); print join(" ", "Matches:", @m, "\n"); print join(" ", "Offsets:", @o, "\n\n"); }
It thus is working around the closure effect of "binding" the first instance of the dynamic variable @o to the ?{...} code.
(I'm not saying that this is in any way better than the other suggestions (in particular blazar's suggestion using our @o)... but heh, Perl would only be half as much fun if there weren't always more than one way to do it :)
In reply to Re: Multiple uses of (?{ code }) do not appear to be called
by almut
in thread Multiple uses of (?{ code }) do not appear to be called
by bsdz
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |