my @top_3; my $filled = 0; VAL: for my $val ( map { values %{$hoh->{$_}} } keys %$hoh ) { if ( ! $filled ) { for ( 0 .. 2 ) { if ( ! defined $top_3[$_] ) { $top_3[$_] = $val; $filled = 1 if $_ == 2; next VAL; } } } if ( $val > $top_3[0] ) { ($top_3[0], $top_3[1]) = ($val, $top_3[0]); } elsif ( $val > $top_3[1] ) { ($top_3[1], $top_3[2]) = ($val, $top_3[1]); } elsif ( $val > $top_3[2] ) { $top_3[2] = $val; } } print "$_\n" for @top_3;