小编Mat*_*hew的帖子

Perl的Capture :: Tiny :: capture()避免在使用system()时需要磁盘io?

从Perl脚本调用外部程序时,Capture :: Tiny是否可以避免在使用system()时需要磁盘io?使用任何一种时,我都能获得基本相同的性能。一位同事正在使用我的代码,并告诉我它正在敲击磁盘。在本地计算机上运行并写入本地磁盘时,我(也许)没有这个问题。

我以前是这样做的:

open($fhStdin, ">stdin.txt");
print $fhStdin "some text\n";
close($fhStdin);
system("cmd < stdin.txt 1> stdout.txt 2> stderr.txt"); 
# open and read stdout.txt
# open and read stderr.txt
Run Code Online (Sandbox Code Playgroud)

并更改为:

($stdout, $stderr, $exit) = capture {
    open($fhStdin, '| cmd');
    print $fhStdin "some text\n";
    close($fhStdin);
};
Run Code Online (Sandbox Code Playgroud)

但是NYTProf告诉我,它们花费的时间基本上相同(但是NYTProf消除了子例程时间的磁盘io开销)。所以我想知道capture()是否在后台写入临时文件?(我尝试阅读Tiny.pm源代码,但感到羞耻地说我无法分辨。)

感谢您的提示。

io perl

2
推荐指数
1
解决办法
93
查看次数

标签 统计

io ×1

perl ×1