2

test2.txtテキストText2(および末尾の改行)が含まれている次のコードを検討してください。

use File::Copy;

open (my $fh, "|-", "cat");
print $fh "Test1\n";

copy("test2.txt", $fh);

close $fh;

これが印刷されることを期待しています:

Test1
Test2

ただし、次のものが印刷されています。

Test2
Test1

なぜこれが発生するのですか?どうすれば修正できますか?

4

1 に答える 1

1

バッファリングされた IO とバッファリングされていない IO を混在させていますが、決して良い考えではありません。(File::Copy は、sysread/syswrite と、2 つの間の独自のバッファーを使用します。)

あなたはただやった方がずっと良いです:

use File::Slurp 'read_file';

print $fh read_file('test2.txt');

なぜあなたが cat にパイピングしているのか、そしてそれを本当にバッファリングしたいのか疑問に思っています。

于 2013-03-04T08:16:28.147 に答える