При отправке вывода в файл почему stderr и stdout расположены в неправильном порядке?
У меня есть скрипт на Perl:
warn "1\n";
print "2\n";
warn "3\n";
print "4\n";
Я передаю вывод в файл:
perl script.pl &> foo
кошка фу:
1
3
2
4
Почему вывод не в порядке, и как я могу это исправить?
1 ответ
Решение
STDERR автоматически сбрасывается после печати строки, STDOUT - нет. Буфер STDOUT сбрасывается, только если он заполнен. Для принудительной автоматической очистки также используется STDOUT.
STDOUT->autoflush(1);
(Если у вас более старый Perl, то вышеприведенный может не работать, вместо этого вы должны использовать что-то вроде $| = 1;)