gpt4 book ai didi

perl - Perl 反引号和管道之间的区别

转载 作者:行者123 更新时间:2023-12-04 15:24:31 25 4
gpt4 key购买 nike

我有一个可执行工具,它返回由制表符分隔的数据作为输出,数据非常庞大,希望该工具的输出成为 Perl 程序的输入以进行进一步处理,从性能角度来看,首选使用方式是什么

@res=`mytool`

和处理@res

或使用管道运算符读取工具,同时返回结果并进行如下处理:

open(RES, "mytool |") or die "Couldn't fork: $!\n";
while (<RES>) { # ... }

最佳答案

第二种形式几乎总是比第一种形式更快(至少如果您的代码和提供列表的代码需要一些时间来计算)。

这里有一个简单的例子:

use strict;

use Benchmark qw(:all) ;
timethis (3,\&backtick );
timethis (3,\&pipe);

sub backtick {
my @res=`locate .ssh`;
my $count =0;
foreach my $line (@res) {
select(undef,undef,undef, .02); #20-millisecond delay
$count += length($line);
}
print "$count \n";
}

sub pipe{
local *RES;
open(RES, "locate .ssh |") or die "Couldn't fork: $!\n";

my $count =0;
while (<RES>) { #
select(undef,undef,undef, .02); #20-millisecond delay
$count += length($_);
}
print "$count \n";
}

将在我的电脑上打印:

4921
4921
4921
timethis 3: 21 wallclock secs ( 0.00 usr 0.00 sys + 15.11 cusr 0.19 csys = 15. 30 CPU) @ 0.20/s (n=3)
(warning: too few iterations for a reliable count)
4921
4921
4921
timethis 3: 16 wallclock secs ( 0.00 usr 0.00 sys + 15.15 cusr 0.18 csys = 15. 33 CPU) @ 0.20/s (n=3)

(定位 .ssh 大约需要 5 秒才能完成)

关于perl - Perl 反引号和管道之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62558720/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com