Возможно, вы читаете файл Mac на платформе, отличной от Mac.
В этом случае другой вариант - преобразовать окончания строк за пределами вашего сценария: он имеет преимущество в том, что сам сценарий может выполняться без изменений на любой комбинации файлов платформы / исходного кода, но, конечно, он медленнее (по сравнению с предложением Энди). ).
Он состоит из трех шагов: сначала преобразование новой строки (если вы используете * nix):
perl -pe 's/\r/\n/g' macfile.csv > unixfile.csv
затем ваш скрипт (без добавления \r
при печати, как уже сказал Энди) или просто из командной строки:
perl -l0ne 'print "$_\n" x 8' unixfile.csv > unixfile8.csv
, который, если вы уверены, что ваш исходный файл заканчивается новой строкой, может быть дополнительно уменьшен до:
perl -ne 'print $_ x 8' unixfile.csv > unixfile8.csv
и наконец:
perl -pe 's/\n/\r/g' unixfile8.csv > macfile8.csv
О вашем скрипте: просто помните, что use diagnostics
также автоматически активирует warnings
, и что предпочтительный стиль для имен переменных Perl - $all_lowercase_with_underscore
.
Также взгляните на Новые строки Perl на разных платформах