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


in reply to Re^9: B::Xref buggy?
in thread B::Xref buggy?

Thanks, Dave.

I was aware that OPs do kind of gotos to next-OPs (the ->label at the end of each line).

But it didn't seem logical that the -src option could be offered if B::Concise wasn't respecting the order.*

The solution is that the source lines they are not in order, but the line numbers are still reliable:

D:\tmp>type tst_b_xref3.pl unless ($var1) { $var2++; } else { $var3++; }
(Win Activestate 5.24)
D:\tmp>perl -MO=Concise,-src tst_b_xref3.pl|find "var" tst_b_xref3.pl syntax OK # 1: unless ($var1) { 3 <#> gvsv[*var1] s ->4 # 5: $var3++; 7 <#> gvsv[*var3] s ->8 # 2: $var2++; d <#> gvsv[*var2] s ->e

So strictly speaking it's still possible to use B::Concise to emulate B::Xref on line number level.

Cheers Rolf
(addicted to the Perl Programming Language :)
Wikisyntax for the Monastery FootballPerl is like chess, only without the dice

*) Interestingly this also depends on the Perl version. Here the vars appear in order: (Ubuntu 5.18)

$ perl -MO=Concise,-src tst_b_xref3.pl|grep var tst_b_xref3.pl syntax OK # 1: unless ($var1) { 3 <#> gvsv[*var1] s ->4 # 2: $var2++; 8 <#> gvsv[*var2] s ->9 # 5: $var3++; e <#> gvsv[*var3] s ->f

update

and that's the reason why, 5.24 is optimizing the negation away by swapping the branches:

D:\tmp>perl -MO=Deparse tst_b_xref3.pl tst_b_xref3.pl syntax OK if ($var1) { ++$var3; } else { ++$var2; }