正则表达式-Ruby vs Perl

我注意到我的Ruby(1.9)脚本中出现了一些极端的延迟,经过一番挖掘后,它归结为正则表达式匹配。我在Perl和Ruby中使用以下测试脚本:

Perl:

$fname=shift(@ARGV);
打开(文件“<fname”);
而(<文件>){
如果(/(.*)\|*?发送请求。*?TID=(.*),/){
打印“$1:$2\n”;
}
}

Ruby:

f=File.open(ARGV.shift)
while(line=f.get)
如果/(.*)\|*?发送请求。*?TID=(.*),/.match(行)
放置“{$1}:{$2}”
终止
终止

我对两个脚本使用相同的输入,一个只有44290行的文件。
每一个的时间是:

Perl:

[email protected]:~/bin/local/project$time./try.pl input&gt/dev/null
实际0.049秒
用户0m0.040s
系统0m0.000s

Ruby:

[email protected]:~/bin/local/project$time./try.rb input&gt/dev/null
实1m5.106s
用户1m4.910s
sys 0m0.010s

我想我在做一些非常愚蠢的事情,有什么建议吗

多谢各位

regex=Regexp.new(/(.*)\|.*)发送请求。*?TID=(.*),/)
f=File.open(ARGV.shift)。每个do |行|
如果正则表达式匹配(行)
放置“{$1}:{$2}”
终止
终止

regex=Regexp.new(/(.*)\|.*)发送请求。*?TID=(.*),/)
f=文件.open(ARGV.shift)
f、 每条线都要做|
如果正则表达式匹配(行)
放置“{$1}:{$2}”
终止

发表评论