in reply to B::Deparse weirdness
B::Deparse thinks (and I expected) that parens have priority to capture function arguments and that
do('foo')->{'bar'};
is analogous to
(do 'foo') -> {bar}
but the weird parser rather sees
do ('foo' -> {bar})
see the difference in priority of parens around arguments by comparing print() vs do()
lanx@nc10-ubuntu:/tmp$ perl -MO=Concise, -e 'do ($foo)->{bar};' 9 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v:{ ->3 8 <1> dofile vK/1 ->9 # do file 7 <2> helem sK/2 ->8 # hash-elem returns fi +le 5 <1> rv2hv[t2] sKR/1 ->6 4 <1> rv2sv sKPM/DREFHV,1 ->5 3 <#> gv[*foo] s ->4 6 <$> const[PV "bar"] s/BARE ->7 -e syntax OK lanx@nc10-ubuntu:/tmp$ perl -MO=Concise, -e 'print ($foo)->{bar};' 9 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v:{ ->3 8 <2> helem vK/2 ->9 # hash-element 6 <1> rv2hv[t2] sKR/1 ->7 5 <@> print sK ->6 # print returns hashre +f 3 <0> pushmark s ->4 - <1> ex-rv2sv sK/1 ->5 4 <#> gvsv[*foo] s ->5 7 <$> const[PV "bar"] s/BARE ->8 -e syntax OK
just remember the common trap when people try writing something like
print (caller)[5]
$ perl -c -e 'print (caller)[5]' syntax error at -e line 1, near ")[" -e had compilation errors.
while
$ perl -c -e 'do (L,I,S,T)[5]' -e syntax OK
Cheers Rolf
(addicted to the Perl Programming Language and ☆☆☆☆ :)
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: B::Deparse weirdness (parser weirdness!)
by LanX (Saint) on Oct 13, 2014 at 12:42 UTC | |
by LanX (Saint) on Oct 13, 2014 at 23:09 UTC |