最近我对正则表达式变得友好,并使用它们非常有效地完成了许多任务。与大多数 perl 一样,TIMTOWTDI 影响了我的判断。有时我可以使用相等运算符或绑定(bind)运算符。但是,有时使用一个比另一个更合适吗?
首先是简化的情况
my $name = 'Chris';
if ($name eq 'Chris') { print 'What a great name!'; }
if ($name =~/^Chris$/) { print 'Yip sure is a great name; }
因此,在这种情况下,这是最简化的,其中使用等式减少了输入,但是在这个简化的示例中,两者都有什么好处。
在一个稍微复杂一点的例子中
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; }
这里绑定(bind)运算符的输入更少。但是,我不确定其中任何一个的好处是否优于另一个。
如果您将整个字符串与固定值匹配以使用相等运算符,并且如果您将字符串与模式匹配,例如任何 5 位数字字符串 /\d{5}/
然后使用绑定(bind)运算符。
在上面的例子中使用绑定(bind)运算符是不是不合适。我很欣赏这些例子只是编造的,可能无法反射(reflect)现实生活中的问题。然而,我想到了他们来解释我的问题。
最佳答案
however in this simplified example is there any benefit to one or the other.
嗯,它们并不等同。 /^Chris$/
匹配 Chris
和 Chris
后跟换行符。
如果您使用了等效的模式 (/^Chris\z/
),区别将是性能。单个字符串比较将比正则表达式匹配更快。也更清晰。
对于更复杂的比较,您通常希望选择更简单、更清晰且更易于维护的方法。解决性能问题(通过使用配置文件和运行基准测试)。
关于regex - 何时使用相等运算符而不是绑定(bind)运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19623096/