Причина, по которой вы столкнулись с этой проблемой, заключается в том, что методы ввода-вывода файлов Perl настроены для корректной работы с окончаниями строк, используемыми локальной операционной системой.Когда вы читаете файл, использующий другое соглашение о конце строки (например, текстовый файл Windows, обрабатываемый в * nix ОС), это может помешать правильной работе chomp
.
В качестве первого предложения вperldoc states, chomp
" удаляет любую завершающую строку, которая соответствует текущему значению $/
".Итак, если вы знаете, когда вы используете файл Windows по сравнению с файлом * nix, вы можете обойти другое соглашение об окончании строки ОС, установив для $/
соответственно \n
для * nix ина \r\n
для Windows.
Если вы не знаете, какое соглашение о конце строки использует данный файл, вам придется прибегнуть к регулярному выражению, например $line =~ s/\r?\n\z//
.Если в вашей ситуации приемлемо удалить все конечные пробелы (не только окончания строк), $line =~ s/\s+\z//
сделает это за вас и потенциально сэкономит вам еще один шаг позже.