#!/usr/bin/perl use strict; my %r; $r{123}{a}=3; $r{123}{b}=2; $r{456}{c}=5; $r{456}{d}=7; map { print "\$r{$_->[0]}{$_->[1]} ==> $r{$_->[0]}{$_->[1]}\n" } map { [$_,(sort { $r{$_}->{$b} <=> $r{$_}->{$a} } keys %{$r{$_}})[0]]} keys %r; #### $r{456}{d} ==> 7 $r{123}{a} ==> 3 #### my %rmax; $rmax{$_} = (sort { $r{$_}->{$b} <=> $r{$_}->{$a} } keys %{$r{$_}})[0] for keys %r; print "\$r{$_}{$rmax{$_}} ==> $r{$_}{$rmax{$_}}\n" for keys %rmax; #### $r{123}{a} ==> 3 $r{456}{d} ==> 7