http://www.perlmonks.org?node_id=428634


in reply to Re: Equivalency of Code
in thread Equivalency of Code

This was actually my first instinct too, here was the output I got from testing with B::Concise.

stvn% perl -MO=Concise -e '$x++' 5 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 4 <1> preinc[t2] vK/1 ->5 - <1> ex-rv2sv sKRM/1 ->4 3 <#> gvsv[*x] s ->4 -e syntax OK stvn% perl -MO=Concise -e '$x += 1' 6 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 5 <2> add[t2] vKS/2 ->6 - <1> ex-rv2sv sKRM/1 ->4 3 <#> gvsv[*x] s ->4 4 <$> const[IV 1] s ->5 -e syntax OK stvn% perl -MO=Concise -e '$x = $x + 1' 8 <@> leave[1 ref] vKP/REFC ->(end) 1 <0> enter ->2 2 <;> nextstate(main 1 -e:1) v ->3 7 <2> sassign vKS/2 ->8 5 <2> add[t3] sK/2 ->6 - <1> ex-rv2sv sK/1 ->4 3 <#> gvsv[*x] s ->4 4 <$> const[IV 1] s ->5 - <1> ex-rv2sv sKRM*/1 ->7 6 <#> gvsv[*x] s ->7 -e syntax OK
You can see that the x += 1 and x = x + 1 are similar, but not enough to call equivalent. Besides I am not sure that opcode equivalence would actually work since perl performs optimizations on the opcode tree during compilation which you would not want to include in your comparisons.

-stvn