in reply to Re: my $a outside sort block incompatibility
in thread my $a outside sort block incompatibility

That only works if you are calling sort from package main.
  • Comment on Re^2: my $a outside sort block incompatibility

Replies are listed 'Best First'.
Re^3: my $a outside sort block incompatibility
by BrowserUk (Patriarch) on Feb 21, 2009 at 10:23 UTC

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

    Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
    "Science is about questioning the status quo. Questioning authority".
    In the absence of evidence, opinion is indistinguishable from prejudice.
      Interesting. I would assume that is because it is more efficient to access a lexical than a package variable.
      you know you can sort { our $a <=> our $b } @x, huh? :-) IMHO it's prettier...
      []s, HTH, Massa (κς,πμ,πλ)