in reply to Re^2: sort/reverse strangeness
in thread sort/reverse strangeness

Note that there is a difference between reverse sort LIST and sort { $b cmp $a } LIST; both are optimized, but the latter is stable (leaves elements in their original order) in the case of distinct elements with the same string value (overloaded, or dual valued), while the former is, err, reversed. Note which elements have a cached numeric value of 0 (and so don't warn in numeric context) here:
$ perl use strict; use warnings; my @blanks = ("",""); { no warnings; $blanks[0]+0 } my @stable = sort { $b cmp $a } @blanks; my @reversed = reverse sort @blanks; warn '$stable[0]'."\n"; 1 if $stable[0]+0; warn '$stable[1]'."\n"; 1 if $stable[1]+0; warn '$reversed[0]'."\n"; 1 if $reversed[0]+0; warn '$reversed[1]'."\n"; 1 if $reversed[1]+0; __END__ $stable[0] $stable[1] Argument "" isn't numeric in addition (+) at - line 10. $reversed[0] Argument "" isn't numeric in addition (+) at - line 12. $reversed[1]
Sort comparisons of { $a <=> $b } and { $b <=> $a } (with or without reverse) are also optimized.