从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源代码,但感到羞耻地说我无法分辨。)
感谢您的提示。