Nathan Torkington wrote:
> Piers Cawley writes:
> > > > The $a and $b of the sort comparator were A Bad Idea to begin with.
> > >
> > > Ditto. Can we ditch these in Perl 6? Don't see why $_[0] and $_[1]
can't
> > > be used, or even a more standard $1 and $2. Either one makes it more
> > > obvious what's being operated on.
> >
> > $1 & $2 could be somewhat dangerous in a sub that might have regexen
> > in it...
>
> $1 and $2 are a poor choice because of regexps.
>
> $a and $b were done for speed: quicker to set up those global
> variables than to pass values through the stack.  The documentation
> for perl5's sort function says that passing as arguments is
> considerably slower.  I don't think you can handwave and say "oh,
> that's an implementation detail".  I think it's an implementation
> detail that's bloody hard to fix, especially for things like code
> references passed to sort:
>
>   sort $some_ref @unordered
>
> Perl can't do anything at compile-time to tell sort where lexicals
> in the sort sub are.
>
> So I don't have a solution, I just have more detail on the problem.
>
The solution is to pass args in as $_[0] and $_[1]. Using higher-order
function notation allows these args to be named however you like:

  sort ^left cmp ^right, @list;
  sort ^1 cmp ^2, @list;
  sort ^_ cmp ^_, @list;


Reply via email to