Почему Tie::File добавляет строку, если файл отсортирован?
У меня есть этот маленький Perl-скрипт, который должен сортировать файл:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::File;
tie my @lines, 'Tie::File', 'fileToBeSorted.txt' or die $!;
printf "line count before: %d\n", scalar @lines;
@lines= sort @lines;
printf "line count after: %d\n", scalar @lines;
untie @lines;
Когда запустить с этим входом (fileToBeSorted.txt
)
one;4;1
two;3;2
three;2;3
four;1;4
вывод скрипта
line count before: 4
line count after: 5
и действительно, отсортированный файл содержит пустую пятую строку. Почему это и как я могу предотвратить это?
2 ответа
Решение
Как уже упоминалось в удаленном ответе, это, похоже, известная ошибка.
Временное присвоение несвязанной переменной списка - это обходной путь
my @dummy = sort @lines;
@lines = @dummy;
но это все еще пахнет как ошибка, и вы должны сообщить об этом.
Обновление: уже сообщается (нашими собственными ikegami, не меньше). Обсуждение Perlmonks здесь.
Как упоминалось в соответствующем обсуждении PerlMonks, @lines = ((), sort @lines);
может быть использован для обхода ошибки.