push @Aoh, { split / / };
Создает следующий хеш из первой строки:
{ chipper => 'jones',
29 => 80,
70 => undef,
}
Это не то, что вы хотели, верно?
Я бы использовал хэш чисел вместо массивахешей.Вы можете использовать «фамилию, имя» непосредственно в качестве хеш-ключа, и вы можете сохранить средние значения непосредственно как значения:
#!/usr/bin/perl
use warnings;
use strict;
use List::Util qw{ sum };
my %average;
while (<>) {
my ($name, $surname, @grades) = split;
$average{"$surname, $name"} = sum(@grades) / @grades;
}
for my $student (sort { $average{$a} <=> $average{$b} } keys %average) {
print $student, ' ', $average{$student}, "\n";
}
Обратите внимание, что я получаю предупреждение:
Аргумент "5x9" не является числовым в подпрограмме в строке ./1.pl строка 11, <> строка 3.
Как следует относиться к оценке 5x9
?