La soluzione package Sorting; sub compare($$) { my ($a, $b) = @_; $a <=> $b; } package main; @sorted = map { $_->[0] } sort Sorting::compare map { [$_, f( $_ )] } @unsorted; A partire da Perl 5.6!