Of course you need to use the appropriate package variables. That said, I recind my suggestion in favour of the OPs use of our.
Not because of any problem with the use of qualified package vars, but because against my expectations, it runs far more quickly. Indeed, unless someone can show me the flaw in my benchmark, I'll be explicitly including our( $a, $b) in all my sorts from now on:
#! perl -slw use strict; use Benchmark qw[ cmpthese ]; cmpthese -10, { "\$a<=>\$b" => q[my @a = sort{ $b <=> $a } 1 +.. 1e6;], "\$::a<=>\$::b" => q[my @a = sort{ $::b <=> $::a } 1 +.. 1e6;], "our(\$a,\$b)" => q[my @a = sort{ our( $a, $b ); $b <=> $a } 1 +.. 1e6;], }; __END__ C:\test>junk2.pl s/iter $::a<=>$::b $a<=>$b our($a,$b) $::a<=>$::b 2.09 -- -0% -77% $a<=>$b 2.08 0% -- -77% our($a,$b) 0.469 344% 343% --
UPDATE: I guess it really is time to upgrade. Under 5.10 I get much closer to what I expected:
Rate our($a,$b) $a<=>$b $::a<=>$::b our($a,$b) 1.75/s -- -46% -46% $a<=>$b 3.24/s 85% -- -0% $::a<=>$::b 3.24/s 86% 0% --
In reply to Re^3: my $a outside sort block incompatibility
by BrowserUk
in thread my $a outside sort block incompatibility
by Anonymous Monk
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |