in reply to Re^2: two regexes in one function call
in thread two regexes in one function call
#! perl -sw use 5.010; $data = do { local $/ = undef; <DATA> }; my $x = [map \$_, scalar($data =~ s/(\w+)/$1/g), scalar($data =~ s/\n/\n/g), ]; say "@$x"; my $y = [map \$_, scalar($data =~ s/\n/\n/g), scalar($data =~ s/(\w+)/$1/g), ]; say "@$y"; __DATA__ Line1 Word Something Line2 Other Word
SCALAR(0x2392c4) SCALAR(0x239224) SCALAR(0x239314) SCALAR(0x239314)
The Ys use the same variable for the return value, but not the Xs.
I don't actually know *why* the two calls return the same variable.
Interestingly, the problem goes away if the captures are removed.
Update: There has been a change in the relevant code since 5.10.0, but it appears to be an optimisation and not a fix.
5.10.0:
PUSHs(sv_2mortal(newSViv((I32)iters)));
maint-5.10 as it stands right now:
mPUSHi((I32)iters);
In both case, it looks like the operator always returns a new SV, so maybe there's some stack corruption??
|
|---|