my %max = do{ local %_ = %unique_descriptive; %{ shift @{[ map{$_->[2]} sort{$b->[0] <=> $a->[0] || $b->[1] <=> $a->[1]} map{[$_{$_}->{count}, $_, $_{$_}]} keys %_ ]} }; }; dump_ref(\%max,'%max'); __OUTPUT__ %max = { 'count' => 3, 'values' => [20,20,20] }