in reply to Re: two regexes in one function call
in thread two regexes in one function call

I'm not sure that's the complete explaination as you get different results if you reverse the order of the statements:

#! perl -sw use 5.010; $data = do { local $/ = undef; <DATA> }; my $x = [ scalar($data =~ s/(\w+)/$1/g), scalar($data =~ s/\n/\n/g), ]; say "@$x"; my $y = [ scalar($data =~ s/\n/\n/g), scalar($data =~ s/(\w+)/$1/g), ]; say "@$y"; __DATA__ Line1 Word Something Line2 Other Word

Gives:

c:\test>783947.pl 6 2 6 6

(Plus tr isn't a regex!)


Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
"Science is about questioning the status quo. Questioning authority".
In the absence of evidence, opinion is indistinguishable from prejudice.
RIP PCW

Replies are listed 'Best First'.
Re^3: two regexes in one function call
by ikegami (Patriarch) on Jul 28, 2009 at 16:56 UTC
    Minor change:
    #! 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);

    Patch

    In both case, it looks like the operator always returns a new SV, so maybe there's some stack corruption??