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.
|