open my $input_fh, '<', 'skaters.txt'
or die "Can't read skaters.txt: $!";
####
my @skater_records
= map { chomp; [ split /,/ ] }
grep { /\S/ } <$input_fh>;
####
use strict;
use warnings;
use List::Util qw( sum );
my $skaters_file = shift @ARGV || 'skaters.txt';
my @top_three;
open my $skaters_fh, '<', $skaters_file
or die "Can't read skaters file '$skaters_file': $!";
while ( my $csv_line = <$skaters_fh> ) {
chomp $csv_line;
my ( $name, @scores ) = split /,/, $csv_line;
# remove highest and lowest score
@scores = sort { $a <=> $b } @scores;
shift @scores;
pop @scores;
my $mean_score = sum( @scores ) / scalar @scores;
push @top_three, { name => $name, score => $mean_score };
@top_three = reverse sort { $a->{score} <=> $b->{score} } @top_three;
@top_three = @top_three[ 0 .. 2 ] if 3 < scalar @top_three;
}
close $skaters_fh or die "close failed: $!";
foreach my $skater ( @top_three ) {
print "$skater->{name}: $skater->{score}\n";
}
__END__
Guido Chuffart: 88.2
Jack Creasey: 85.8
Cecilia Cornejo: 85.4