http://www.perlmonks.org?node_id=510728


in reply to extracting the largest values

Your problem is that if you find a new largest value, you completely forget the current largest value. Instead the current largest value should become the new second largest value, and the new largest value should become the new largest value. Something like (untested):
if ($value > $largest_value) { ($largest_value, $second_value) = ($value, $largest_value); next; } if ($value > $second_value) { $second_value = $value; }
If you go for a minimum amount of lines, you could also do:
($largest_value, $second_value) = sort {$a <=> $b} $largest_value, + $second_value, $value;
Perl --((8:>*