You have been close. Johngg did already post one solution (he was faster than me ;-)
Another variant would be:
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;
Regards
mwa