use warnings; use strict; my %hash = (4 => '1', 5 => '5', 7 => '2', 1 => '7', 10 => '9', 3 => '0', 2 => '3', 9 => '8'); print GetSecondLargest(values %hash); sub GetSecondLargest { my @largest = (shift); while (@_) { my $new = shift; if ($new >= $largest [-1]) { unshift @largest, $new; next; } $largest[1] = $new if ! $#largest or $new > $largest[1]; } return $#largest ? $largest[1] : undef; }