my @sorted_keys = sort { extract( $hash{ $a } ) <=> extract( $hash{ $b } ) } keys %hash; for my $key ( @sorted_keys ) { # whatever } #### my @sorted_keys = sort { $hash{ $a } cmp $hash{ $b } } keys %hash; for my $key ( @sorted_keys ) { # whatever } #### my @sorted_keys = map { $_->[0] } sort { $a->[1] cmp $b->[1] } map { [ $_, extract( $hash{ $_ } ) ] } keys %hash; #### my @sorted = sort { f($a) cmp f($b) } @unsorted; #### my @sorted = sort { f($a) <=> f($b) } @unsorted; #### sub f { my $key = shift; return $hash{ $key }; }