my @sorted=do{ my $n; my %stuff=map { func($_) . ':' . $n++ => $_ } @unsrt; @stuff{sort keys %stuff}; }; #### my @sorted=do{ my @keys=map func($unsrt[$_]) . ":$_", 0 .. $#unsrt; @unsrt[ map +(split /:/)[-1], sort @keys ]; }; #### my @sorted=@unsrt[ map +(split /:/)[-1], sort map func($unsrt[$_]) . ":$_", 0 .. $#unsrt ]; #### my @sorted=map $unsrt[ (split /:/)[-1] ], sort map func($unsrt[$_]) . ":$_", 0 .. $#unsrt;