Perl中'eq'和'=〜'之间有什么区别?

use*_*283 15 perl operators

这两个运营商有什么区别?具体来说,两者$a之间的差异会导致两者之间的不同行为?

$a =~ /^pattern$/

$a eq 'pattern'
Run Code Online (Sandbox Code Playgroud)

fri*_*edo 29

eq用于测试字符串相等性,==但数字相等是相同的.

=~操作员是用于将正则表达式为标量.

有关每个Perl运算符的详细信息以及它们的用途,请参阅perldoc perlop联机帮助页.

  • 除了'perldoc perlop`之外,您还可以在Github上查看`perlopref` - 正在进行中的工作:http://github.com/cowens/perlopref (2认同)

Ada*_*ire 18

正如其他人所说,($a =~ /^pattern$/)使用正则表达式引擎来评估字符串是否相同,而是($a eq 'pattern')纯字符串相等性测试.

如果你真的只想知道两个字符串是否相同,后者是首选,原因如下:

  • 可读性 - 它更简洁,包含更少的特殊字符.
  • 可维护性 - 使用正则表达式模式,您必须转义可能出现在字符串中的任何特殊字符,或使用额外的标记,如\Q\E.使用单引号字符串,您需要转义的唯一字符是单引号.(如果后跟另一个反斜杠或字符串分隔符,还必须转义反斜杠.)
  • 性能 - 您不会因为比较字符串而产生启动正则表达式引擎的开销.例如,如果您的计划中发生了数百万次,那么效益值得注意.

在另一方面,如果你需要做一些正则表达式的形式是灵活得多其他比一个普通的字符串相等测试.有关正则表达式的更多信息,请参阅perldoc perlre.

编辑:ysth之前的大多数人一样,我错过了它们之间明显的功能差异,并直接寻求更抽象的差异.我已经澄清了这个问题,但我会把答案留作(希望)有用的参考.


Don*_*nut 6

eq - 测试字符串相等性.

=~ - 将标量表达式绑定到模式匹配.

有关所有运算符的更深入描述,请参见此处.


yst*_*sth 4

“模式\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/。