sub make_sort_sub { my $coderef = shift; my $hashref = shift; my $sort_sub = sub { something goes here } return $sort_sub; } my %hash = ( a => 5, b => 4, c => 3 ); my $keys_by_value = make_sort_sub( { $hashref->{$a} <=> $hashref->{$b} }, \%hash); my @keys_sorted_by_value = sort $keys_by_value %hash;