Прошло пару месяцев с тех пор, как я был Перлином, но я полностью застрял в том, почему это происходит ...Почему перформанс Perl влияет на выходные данные моей печати?
Я на OSX, если это имеет значение.
Я пытаюсь преобразовать строки в файле как
08/03/2011 01:00 PDT,1.11
в STDOUT линии как
XXX, 20120803, 0100, KWH, 0.2809, A, YYY
Поскольку я читаю файл, я хочу chomp
после каждой строки считывается in. Однако, когда я chomp
, я нахожу, что моя печать все испортилась. Когда я не chomp
, печать прекрасна (за исключением дополнительной строки новой строки ...). Что тут происходит?
while(<SOURCE>) {
chomp;
my @tokens = split(' |,'); # @tokens now [08/03/2011, 01:00, PDT, 1.11]
my $converted_date = convertDate($tokens[0]);
my $converted_time = convertTime($tokens[1]);
print<<EOF;
$XXX, $converted_date, $converted_time, KWH, $tokens[3], A, YYY
EOF
}
С chomp
вызова в там, выход все смешалось:
, A, YYY10803, 0100, KWH, 1.11
Без chomp
вызова в там, по крайней мере, печать в правильном порядке, но с дополнительной новой линии :
XXX, 20110803, 0100, KWH, 1.11 , A, YYY
Обратите внимание, что с chomp
в там, как он переписывает символ новой строки «на вершине» в первой строке. Я добавил autoflush $|=1;
, но не знаю, что еще делать здесь.
Мысли? И спасибо заранее ....
Откуда у вас файл данных? Возможно ли, что у него есть нечетные символы окончания строки? –
Это обычная проблема с файлом Windows в Unix. См. Предыдущие обсуждения: http://stackoverflow.com/questions/881779/neatest-way-to-remove-linebreaks-in-perl http://stackoverflow.com/questions/1836217/perl-or-something-else-m -проблема http://stackoverflow.com/questions/7534591/cr-vs-lf-perl-parsing – daxim