这两个运营商有什么区别?具体来说,两者$a
之间的差异会导致两者之间的不同行为?
$a =~ /^pattern$/
$a eq 'pattern'
Run Code Online (Sandbox Code Playgroud)
fri*_*edo 29
eq
用于测试字符串相等性,==
但数字相等是相同的.
该=~
操作员是用于将正则表达式为标量.
有关每个Perl运算符的详细信息以及它们的用途,请参阅perldoc perlop联机帮助页.
Ada*_*ire 18
正如其他人所说,($a =~ /^pattern$/)
使用正则表达式引擎来评估字符串是否相同,而是($a eq 'pattern')
纯字符串相等性测试.
如果你真的只想知道两个字符串是否相同,后者是首选,原因如下:
\Q
和\E
.使用单引号字符串,您需要转义的唯一字符是单引号.(如果后跟另一个反斜杠或字符串分隔符,则还必须转义反斜杠.)在另一方面,如果你需要做一些正则表达式的形式是灵活得多其他比一个普通的字符串相等测试.有关正则表达式的更多信息,请参阅perldoc perlre.
编辑:像ysth之前的大多数人一样,我错过了它们之间明显的功能差异,并直接寻求更抽象的差异.我已经澄清了这个问题,但我会把答案留作(希望)有用的参考.
“模式\n”:)
$a = "pattern\n";
print "ok 1\n" if $a =~ /^pattern$/;
print "ok 2\n" if $a eq 'pattern';
Run Code Online (Sandbox Code Playgroud)
也许你的意思是/^pattern\z/。