my %server_hash = ( foo => {tag => 1}, bar => {tag => 10}, boot => {tag => 2}, snow => {tag => 8}, fish => {tag => 3}, adv => {tag => 1} ); foreach my $server ( sort {$server_hash{$a} cmp $server_hash{$b} && $server_hash{$a}{tag} <=> $server_hash{$b}{tag} } keys %server_hash) { print "$server:$server_hash{$server}{tag}\n"; } #### foo:1 adv:1 boot:2 fish:3 snow:8 bar:10