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 } ); my @sorted = sort HoHsort keys %HoH; sub HoHsort { $HoH{$b}{value2} <=> $HoH{$a}{value2} || $a cmp $b } print map "$_ =>=> { $HoH{$_}{value2} } \n", @sorted;