in reply to Multiple uses of (?{ code }) do not appear to be called
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 :)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: Multiple uses of (?{ code }) do not appear to be called
by bsdz (Friar) on Dec 29, 2006 at 15:48 UTC | |
by almut (Canon) on Dec 29, 2006 at 18:09 UTC | |
|
Re^2: Multiple uses of (?{ code }) do not appear to be called
by Anonymous Monk on Dec 30, 2006 at 06:41 UTC | |
|
Re^2: Multiple uses of (?{ code }) do not appear to be called
by ikegami (Patriarch) on Mar 12, 2007 at 23:32 UTC |