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,这绝不是一个好主意。(File::Copy 在两者之间使用 sysread/syswrite 和它自己的缓冲区。)

你最好这样做:

use File::Slurp 'read_file';

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

尽管我确实想知道您为什么要对 cat 进行管道传输,以及您是否真的希望对其进行缓冲。

于 2013-03-04T08:16:28.147 回答