http://qs321.pair.com?node_id=11137558


in reply to Re: my within brackets
in thread my within brackets

And, indeed, B::Deparse shows it to be so:

Win8 Strawberry 5.8.9.5 (32) Thu 10/14/2021 17:49:15 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings -MO=Deparse,-p my ($u, $v) = split /,/, 'U,V'; print "'$u' '$v' \n"; (my $w, my $x) = split /,/, 'W,X'; print "'$w' '$x' \n"; ^Z use warnings; use strict 'refs'; (my($u, $v) = split(/,/, 'U,V', 3)); print("'${u}' '${v}' \n"); (my($w, $x) = split(/,/, 'W,X', 3)); print("'${w}' '${x}' \n"); - syntax OK Win8 Strawberry 5.8.9.5 (32) Thu 10/14/2021 18:54:22 C:\@Work\Perl\monks >perl -Mstrict -Mwarnings my ($u, $v) = split /,/, 'U,V'; print "'$u' '$v' \n"; (my $w, my $x) = split /,/, 'W,X'; print "'$w' '$x' \n"; ^Z 'U' 'V' 'W' 'X'
Same results with Perl version 5.30.3.1.


Give a man a fish:  <%-{-{-{-<

Replies are listed 'Best First'.
Re^3: my within brackets
by LanX (Saint) on Oct 14, 2021 at 23:29 UTC
    B::Deparse is occasionally wrong, it has to guess which code was optimized to what it finally sees.

    But the op-tree is more reliable

    D:\tmp\pm>perl -Mstrict -Mwarnings -MO=Concise my ($u, $v) = split /,/, 'U,V'; __END__ 9 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter v ->2 2 <;> nextstate(main 1 -:1) v:*,&,{,x*,x&,x$,$ ->3 8 <2> aassign[t4] vKS ->9 - <1> ex-list lK ->7 3 <0> pushmark s ->4 6 </> split(/","/)[t3] lK/IMPLIM ->7 4 <$> const[PV "U,V"] s ->5 5 <$> const[IV 3] s ->6 - <1> ex-list lKPRM* ->8 7 <0> padrange[$u:1,2; $v:1,2] RM/LVINTRO,range=2 ->8 - <0> padsv[$u:1,2] sRM*/LVINTRO ->- - <0> padsv[$v:1,2] sRM*/LVINTRO ->- - syntax OK D:\tmp\pm>perl -Mstrict -Mwarnings -MO=Concise (my $u, my $v) = split /,/, 'U,V'; __END__ 9 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter v ->2 2 <;> nextstate(main 1 -:1) v:*,&,{,x*,x&,x$,$ ->3 8 <2> aassign[t4] vKS ->9 - <1> ex-list lK ->7 3 <0> pushmark s ->4 6 </> split(/","/)[t3] lK/IMPLIM ->7 4 <$> const[PV "U,V"] s ->5 5 <$> const[IV 3] s ->6 - <1> ex-list lKPRM* ->8 7 <0> padrange[$u:1,2; $v:1,2] RM/LVINTRO,range=2 ->8 - <0> padsv[$u:1,2] sRM*/LVINTRO ->- - <0> padsv[$v:1,2] sRM*/LVINTRO ->- - syntax OK D:\tmp\pm>

    Now, spot the difference! ;-)

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

      Now, spot the difference! ;-)

      $ diff -u \ <( perl -Mstrict -Mwarnings -MO=Concise -e'my ($u, $v) = split / +,/, "U,V";' 2>&1 ) \ <( perl -Mstrict -Mwarnings -MO=Concise -e'(my $u, my $v) = split / +,/, "U,V";' 2>&1 ) \ && echo same same

      PS, I usually use -MO=Concise,-exec

      1 <0> enter 2 <;> nextstate(main 1 -e:1) v:*,&,{,x*,x&,x$,$ 3 <0> pushmark s 4 <$> const[PV "U,V"] s 5 <$> const[IV 3] s 6 </> split(/","/)[t3] lK/IMPLIM 7 <0> padrange[$u:1,2; $v:1,2] RM/LVINTRO,range=2 8 <2> aassign[t4] vKS 9 <@> leave[1 ref] vKP/REFC -e syntax OK
        I though about diff, but I'm mostly on Win and was too lazy to fire up the VM for that °...

        But now I remembered gitbash ...

        MINGW64 ~ $ diff -u \ > <( perl -Mstrict -Mwarnings -MO=Concise -e'my ($u, $v) = split + /,/, "U,V";' 2>&1 ) \ > <( perl -Mstrict -Mwarnings -MO=Concise -e'(my $u, my $v) = split + /,/, "U,V";' 2>&1 ) \ > && echo same same

        thanks! :)

        Cheers Rolf
        (addicted to the Perl Programming Language :)
        Wikisyntax for the Monastery

        °) and I firmly expected someone would do it for me anyway ;-)