Renée Bäcker wrote: > Dr.Ruud wrote: >> Matt Sergeant schreef: >> That's another bug. The "if (1) {}" can be optimized away, but should at >> least leave a (scoping) block. >> >> > > B::Deparse says, that there is a do block: > > rbaecker@test ~/ $ perl -MO=Deparse if.pl > use warnings; > use strict 'refs'; > do { > if (open my $fh, '/etc/passwd') { > print 'inner'; > } > }; I believe that's an expedient hack on behalf of B::Deparse, rather than a do block in the optree. % perl -MO=Concise -e 'if(1) {open my $fh, "-"}' 8 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 4 -e:1) v ->3 - <@> scope vK ->8 - <0> ex-nextstate v ->3 7 <@> open[t3] vK/2 ->8 3 <0> pushmark s ->4 5 <1> rv2gv[t2] sK/DREFSV,1 ->6 4 <0> padsv[$fh:1,2] sM/LVINTRO ->5 6 <$> const(PV "-") s ->7 -e syntax OK % perl -MO=Concise -e 'do {open my $fh, "-"}' 8 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 3 -e:1) v ->3 - <1> null vK*/1 ->8 - <@> scope vK ->- - <0> ex-nextstate v ->3 7 <@> open[t3] vK/2 ->8 3 <0> pushmark s ->4 5 <1> rv2gv[t2] sK/DREFSV,1 ->6 4 <0> padsv[$fh:1,2] sM/LVINTRO ->5 6 <$> const(PV "-") s ->7 -e syntax OK B::Deparse is a best-effort proposition, don't take its output as gospel. DavidThread Previous | Thread Next