use List::Util qw( max); while ( my ( $first, $h) = each %r ) { my $second = { reverse %$h }->{ max values %$h}; print "\%r{$first}{$second} ==> $h->{ $second}\n"; }