my %rehash; for my $SUBNAME (sort keys %HoH){ for my $testname (sort keys %{ $HoH{$SUBNAME} }) { for my $value_name (sort keys %{ $HoH{$SUBNAME}{$testname} } ){ my $val = $HoH{$SUBNAME}{$testname}{$value_name}; if (exists $rehash{$testname}{$value_name} and $rehash{$testname}{$value_name}[1] > $val){ # Do not update - greater value exists }else{ $rehash{$testname}{$value_name} = [$SUBNAME, $val]; } } } } for my $testname (sort keys %rehash){ print "For $testname:\n"; for my $value_name(sort keys %{ $rehash{$testname} }){ print " $rehash{$testname}{$value_name}[0] has $value_name\=$rehash{$testname}{$value_name}[1]\n"; } }