Perl:字符串索引函数或正则表达式 – 哪个更好,什么时候?

前端之家收集整理的这篇文章主要介绍了Perl:字符串索引函数或正则表达式 – 哪个更好,什么时候?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在写一些Perl脚本,我需要做很多字符串匹配.
例如:
my $str1 = "this is a test string";
my $str2 = "test";

要查看$str1是否包含$str2 – 我发现有两种方法

方法1:
使用索引功能

if ( index($str1,$str2) != -1 ) { .... }

方法2:
使用正则表达式:

if( $str1 =~ /$str2/ ) { .... }

哪个更好?什么时候我们应该使用其中的每一个?

解决方法

以下是Benchmark的结果:
use Benchmark qw(:all) ;
my $count = -1;
my $str1 = "this is a test string";
my $str2 = "test";
my $str3 = qr/test/;

cmpthese($count,{
    'type1' => sub { if ( index($str1,$str2) != -1 ) { 1 } },'type2' => sub { if( $str1 =~ $str3 ) { 1 } },});

结果(匹配发生时):

Rate type2 type1
type2 1747627/s    --  -70%
type1 5770465/s  230%    --

为了得出结论,测试不匹配:

my $str2 = "text";
my $str3 = qr/text/;

结果(没有匹配时):

Rate type2 type1
type2 1857295/s    --  -67%
type1 5560630/s  199%    --

结论:

索引函数比正则表达式匹配快得多.

猜你在找的Perl相关文章