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