請考慮以下代碼,其中test2.txt
包含文本Text2
(和尾隨換行符)。使用「File :: Copy」輸出重新排序
use File::Copy;
open (my $fh, "|-", "cat");
print $fh "Test1\n";
copy("test2.txt", $fh);
close $fh;
我預計這將打印:
Test1
Test2
但是,下面的正印:
Test2
Test1
爲什麼會發生這種情況,以及如何解決它?
打開autoflush(IIRC它是'$ | = 1'),看看會發生什麼。 – 2013-03-04 07:54:57
我想這可能會有所幫助,但即使這樣做,我也不確定這是否因爲我幸運。我不希望程序在開發/測試系統上工作,然後由於某些受到負載影響的緩衝問題而導致生產失敗。 – Clinton 2013-03-04 07:57:17
我懷疑發生的事情是,兩個輸出機制使用不同的緩衝區集合,並且關閉'close $ fh'的自動刷新先沖洗,然後在關閉時刷新'cat'進程。 – 2013-03-04 07:58:35