The function you give sort has one job: to tell sort which order you want between two items: $a and $b. If you want the value in $a to sort after the value in $b, your function needs to return 1. If you want it to sort before $b, return -1.
So you don't need to figure out how to get the values, they're handed to you as $a and $b. You simply need to tell sort how to decide which order you want for any two values.
$ cat foo.pl use strict; use warnings; my @list = (qw(now is the time)); sub compare { my ($left, $right) = @_; print "Comparing $left and $right.\n"; return 1 if $left gt $right; return -1 if $left lt $right; return 0; } print "BEFORE: ", join(" ", @list), "!\n"; @list = sort { compare($a,$b) } @list; print "AFTER: ", join(" ", @list), "?\n"; $ perl foo.pl BEFORE: now is the time! Comparing now and is. Comparing the and time. Comparing is and the. Comparing the and now. AFTER: is now the time?
Update: Added punctuation for a bit of fun...
...roboticus
When your only tool is a hammer, all problems look like your thumb.
In reply to Re^5: Need help figuring out how to order/eval the numbers
by roboticus
in thread Need help figuring out how to order/eval the numbers
by perlynewby
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |