$sorter = \&my_sorter; foreach my $key (sort { &$sorter } keys %hash ) { # do something useful } #### $sorter = \&my_sorter; foreach my $key (sort { &$sorter(\%hash) } keys %hash ) { # do something useful } sub my_sorter { my ($hashref) = @_; return $hashref->{$a} cmp $hashref->{$b}; } #### $sorter = \&my_sorter; foreach my $key ( map { $_->[0] } sort { &$sorter } map { [ $_, $hash{$_} ] } keys %hash ) { # do something useful } sub my_sorter { return $a->[1] cmp $b->[1]; }