$HoH{$b}->{"value2"} <=> $HoH{$a}->{"value2"} #### use strict; use warnings; my %HoH = ( "a" => { "value1" => "foo", "value2" => "1"}, "e" => { "value1" => "bar", "value2" => "2"}, "b" => { "value1" => "foo", "value2" => "2"}, "f" => { "value1" => "bar", "value2" => "2"}, "d" => { "value1" => "foo", "value2" => "3"}, "c" => { "value1" => "bar", "value2" => "5"}, "h" => { "value1" => "foo", "value2" => "4"}, "g" => { "value1" => "foo", "value2" => "4"} ); print map {qq{$_ has v1=$HoH{$_}->{value1} and v2=$HoH{$_}->{value2}\n}} sort { $HoH{$b}->{value2} <=> $HoH{$a}->{value2} || $a cmp $b } keys %HoH;