my @sorted_keys = sort {$hash{$a}{$orderby} <=> $hash{$b}{$orderby} || $hash{$a}{$orderby} cmp $hash{$b}{$orderby} keys %hash; @sorted_keys = reverse @sorted_keys if $direction eq "DESC"; foreach my $id (@sorted_keys) { print "$id - $hash{$id}{$orderby}\n"; }