Почему 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); может быть использован для обхода ошибки.

Другие вопросы по тегам