何时使用等于运算符的绑定运算符

Chr*_*yle 2 regex perl equality

最近,我对正则表达式变得友好,并使用它们非常有效地完成了许多任务.与大多数perl一样,TIMTOWTDI使我的判断蒙上阴影.有时我可以使用相等运算符或绑定运算符.但有时候使用一个比另一个更合适吗?

首先是简化案例

my $name = 'Chris';
if ($name eq 'Chris') { print 'What a great name!'; }
if ($name =~/^Chris$/) { print 'Yip sure is a great name; }
Run Code Online (Sandbox Code Playgroud)

所以在这种情况下,这是最简化的,其中使用相等是较少的输入,但是在这个简化的示例中,对于一个或另一个有任何益处.

在一个稍微复杂的例子中

my $name = 'Christopher';
if ($name eq 'Chris' || $name eq 'Christopher') { print 'What a great name!'; }
if ($name =~ /^Chris(?:topher)?$/) { print 'Yip sure is a great name; }
Run Code Online (Sandbox Code Playgroud)

这里绑定操作符的输入较少.但是我不确定这个好处是否可能会占据另一个好处.

如果您使用固定值匹配整个字符串以使用相等运算符,并且如果匹配带有模式的字符串(例如任何5位数字符串)/\d{5}/然后使用绑定运算符,则通用规则也是如此.

在上面的例子中使用绑定运算符是不合适的.我很欣赏这些例子只是弥补,可能无法反映现实生活中的问题.然而,他们是我想要试图解释我的问题.

ike*_*ami 5

然而,在这个简化的例子中,对一方或另一方有任何好处.

嗯,他们不相同./^Chris$/匹配Chris,Chris然后换行.

如果您使用了等效模式(/^Chris\z/),那么差异就是性能.单个字符串比较将比正则表达式匹配更快.它也更清晰.

对于更复杂的比较,您通常希望使用更简单,更清晰,更易于维护的内容.当它成为问题时,解决性能(通过使用配置文件和运行基准).