my $sort_by_numeric_value = sub { my $hash = shift; [ sort {$hash->{$b} <=> $hash->{$a}} keys %$hash ]; }; tie my %sorted_ages, 'Tie::Hash::Sorted', 'Hash' => \ %ages, 'Sort_Routine' => $sort_by_numeric_value; for my $name ( keys %sorted_ages ) { print "$name is $sorted_ages{$name} years old.\n"; } #### sub by_numeric_value { $ages{$b} <=> $ages{$a} } for my $name (sort by_numeric_value keys %ages) { print "$name is $ages{$name} years old.\n"; }