Ваша первая проблема - это тело цикла (на которое, похоже, нет другого ответа).
foreach my $key ( sort keys %hash ) {
print $hash{$key} . "\n";
}
Мы не знаем, что это за ключи %hash
, мы просто знаем, что они передаются вам как $key
в лексическом порядке внутри цикла. Затем вы используете ключи для доступа к содержимому хеша, распечатывая каждую запись.
Значения хэша не выводятся в отсортированном порядке, поскольку вы сортируете по клавишам .
Вместо того, чтобы выводить значения в отсортированном порядке, рассмотрите следующий цикл:
foreach my $value ( sort values(%hash) ) {
printf( "%s\n", $value );
}
Этот цикл выводит значения в указанном порядке:
0
0001
1000
203
23
Чтобы отсортировать их численно, используйте
foreach my $value ( sort { $a <=> $b } values(%hash) ) {
printf( "%s\n", $value );
}
Это производит
0
0001
23
203
1000
что вы и хотели.
См. руководство по Perl для функции sort
для получения дополнительной информации и многих других примеров.