"SHAKARIAN,SERGE (HP-NewJersey,ex1)" wrote:

> Hello,
>
> I think I understand the <=> operator, it returns -1 if left operand is less
> then right, 0 if equal and +1 if left is greater then right. What I dont
> understand is why this works:
>
> @list = sort { $a<=>$b } ( @list ); # lowest to highest if $a and $b are
> reversed highest to lowest
>
> is there a way for the compare operator to return the higher or lower
> operand?
>
> Thanks,
> Serge

Hi Serge,

I'm not sure of the mechanism for stting up infix operators like the <=>, but given 
that this works, the rest sort of flows.  Apparently $a aand $b are package globals 
which alway represent theleft and right operands, respectively, of an infix operator.

>From  perldoc perlvar:

    $a
    $b      Special package variables when using sort(), see "sort" in
            perlfunc. Because of this specialness $a and $b don't need to be
            declared (using local(), use vars, or our()) even when using the
            strict vars pragma. Don't lexicalize them with "my $a" or "my
            $b" if you want to be able to use them in the sort() comparison
            block or function.

It works.  that is what counts.  Whether you are using the operator or the cmp 
string-comparison operator, the comparison parameter defines the total-order semantics 
for the sort.  The sort subroutine itself takes the output of the comparison and uses 
a standard sort routine to apply the comparison through the array specified.  The 
implementation of sort has been evolving, and probably will continue to.

perldoc sort

Joseph


-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to