my @sorted = @unsorted[ do { my @cache = map key_from( $_ ), @unsorted; sort { $cache[$b] <=> $cache[$a] } 0 .. $#cache } ];