Perlスクリプトがあります:
warn "1\n";
print "2\n";
warn "3\n";
print "4\n";
出力をファイルにパイプします。
Perl script.pl &> foo
猫foo:
1
3
2
4
出力が順番どおりにならないのはなぜですか?どうすれば修正できますか?
STDERRは、行の印刷後に自動的にフラッシュされますが、STDOUTはそうではありません。 STDOUTバッファーは、いっぱいになった場合にのみフラッシュされます。 STDOUTでも自動フラッシュを強制するには
STDOUT->autoflush(1);
(古いPerlを使用している場合、上記は機能しない可能性があり、代わりに$| = 1;
などを使用する必要があります)