При отправке вывода в файл почему stderr и stdout расположены в неправильном порядке?

У меня есть скрипт на Perl:

warn "1\n";
print "2\n";
warn "3\n";
print "4\n";

Я передаю вывод в файл:

perl script.pl &> foo

cat foo:

1
3
2
4

Почему нет ' t вывод по порядку, и как мне это исправить?

3
задан 26 November 2013 в 13:43

1 ответ

STDERR автоматически сбрасывается после печати строки, STDOUT - нет. Буфер STDOUT сбрасывается, только если он заполнен. Для принудительной автоматической очистки также на STDOUT используйте

STDOUT->autoflush(1);

(Если у вас более старый Perl, то вышеописанное может не работать, вместо этого вы должны использовать что-то вроде $| = 1;)

0
ответ дан 26 November 2013 в 13:43

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

Похожие вопросы: