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