我有一个 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;
)