use List::Util qw( sum min max ); use strict; use warnings; @ARGV = ('skaters.txt') unless @ARGV; my %skater_avg = map { chomp; my( $skater, @scores ) = split /,/; { $skater => ( sum(@scores)-min(@scores)-max(@scores) ) / (@scores-2) } } <>; print "$_: $skater_avg{$_}\n" for ( sort { $skater_avg{$b} <=> $skater_avg{$a} } keys %skater_avg )[0..2];