my @array = @array[ do { my @rank = map &sortkey_calc @array; sort { $rank[$a] <=> $rank[$b] } 0 .. $#array; } ];