in reply to Re: Prototype like sort()?
in thread Prototype like sort()?

That doesn't allow mysort() to accept coderef without the "sub" like sort() does:

mysort {$b<=>$a} 4,2,1,3; # syntax error

Replies are listed 'Best First'.
Re^3: Prototype like sort()?
by Marshall (Canon) on Jan 25, 2018 at 10:57 UTC
    Ok, fair enough. I am beginning to understand your question, but I'm not there yet. $a and $b are special variables that Perl uses.

    This can't be simply about sort. Perhaps, can you explain more specifically about what you want?

      While I would not recommend it, $a and $b are only special in that they are predeclared and used by sort. Otherwise, you can use them like any other package variable:

      sub mysort (&@) { my $coderef = shift; while (@_ > 1) { $a = shift; $b = $_[0]; my $c = $coderef->(); print " $c"; # do sorting } print "\n"; } mysort { $a <=> $b } qw(1 3 2);

      But, it is a bad idea to use $a and $b except with sort

      But, could use 2 other variables. Just have to declare them.

        While I fully agree with Marshall that prototypes should generally be avoided (that is, unless you really know what your doing and why), and with you that, similarly, $a and $b should also be avoided most of the time, I think that we shouldn't be too dogmatic about that and that it does make sense to use both prototypes and the $a and $b special variables if you're going to write your own sort subroutine.

        BTW, the List::Util module documentation illustrates some cases where it makes perfect sense to use the $a and $b variables in a context that has nothing to do with sorting.

        In the example that I gave in Re: Prototype like sort()?, I'm localizing $a and $b before using them to avoid (at least, I hope) any side effects with their use somewhere else.