Скорее всего, вы вообще не хотите использовать хеш (ассоциативный массив больше не является конструкцией perl).То, что вы описываете, использует массив.Хеши используются для хранения данных, связанных с уникальными ключами, массивов для последовательных данных.
open my $fh, "<", $inputfile or die $!;
my @array = <$fh>;
print @array; # will preserve the order of the lines from the file
Конечно, если вы хотите отсортировать данные, вы можете сделать это с помощью print sort @array
.
Теперь, если бы это было сделано с помощью хэша, вы бы сделали что-то вроде:
my %hash = map { $_ => 1 } <$fh>;
print sort keys %hash; # will not preserve order
И, как вы можете видеть, конечным результатом является только то, что вы не сохраняете исходный порядок файла,но вместо этого придется отсортировать его или получить полуслучайный порядок.Все это время вы рискуете перезаписать ключи, если у вас одинаковые строки.Это хорошо для дедупликации данных, но не для истинного представления содержимого файла.
Вы можете подумать: «Эй, а если я использую ключ другого типа и сохраню строку в качестве значения?»Ну, конечно, вы можете воспользоваться советом Дж. Р. Фергюсона и использовать числовой индекс.Но тогда вы используете массив, просто отказавшись от естественных преимуществ использования правильного массива.Вы на самом деле не получаете ничего, делая это, только теряете вещи.