Quando a saída da tubulação para um arquivo, por que stderr e stdout estão na ordem errada?

1

Eu tenho um script perl:

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

Eu canalizo a saída para um arquivo:

perl script.pl &> foo

cat foo:

1
3
2
4

Por que a saída não está em ordem e como corrigi-la?

    
por Will Sheppard 26.11.2013 / 10:43

1 resposta

3

STDERR é automaticamente liberado após a impressão de uma linha, STDOUT não é. O buffer STDOUT é liberado somente se estiver cheio. Para forçar o autoflushing também no uso de STDOUT

STDOUT->autoflush(1);

(Se você tem um perl mais antigo, o que foi mencionado acima pode não funcionar, em vez disso, você tem que usar algo como $| = 1; )

    
por Slaven Rezic 26.11.2013 / 10:50