【发布时间】:2009-09-17 12:40:10
【问题描述】:
这两个运算符有什么区别?具体来说,$a 的哪些差异会导致两者的行为不同?
$a =~ /^pattern$/
$a eq 'pattern'
【问题讨论】:
这两个运算符有什么区别?具体来说,$a 的哪些差异会导致两者的行为不同?
$a =~ /^pattern$/
$a eq 'pattern'
【问题讨论】:
【讨论】:
perldoc perlop,您还可以查看perlopref - 正在进行中的工作 - 在 Github:github.com/cowens/perlopref
正如其他人所指出的,($a =~ /^pattern$/) 使用正则表达式引擎来评估字符串是否相同,而 ($a eq 'pattern') 是纯字符串相等性测试。
如果您真的只想知道两个字符串是否相同,则首选后者,原因如下:
\Q 和 \E。对于单引号字符串,您需要转义的唯一字符是单引号。 (您还必须转义反斜杠如果它们后跟另一个反斜杠或字符串分隔符。)另一方面,如果您需要做一些 other 的事情,那么正则表达式形式比纯字符串相等性测试要灵活得多。有关正则表达式的更多信息,请参阅perldoc perlre。
编辑: 像ysth 之前的大多数其他人一样,我错过了它们之间明显的功能差异,并直接寻找更抽象的差异。我已经澄清了这个问题,但我会将答案作为(希望)有用的参考。
【讨论】:
【讨论】:
“模式\n”:)
$a = "pattern\n";
print "ok 1\n" if $a =~ /^pattern$/;
print "ok 2\n" if $a eq 'pattern';
也许你的意思是 /^pattern\z/。
【讨论】:
=~ 是绑定运算符。它用于将值绑定到模式匹配 (m//)、替换 (s///) 或音译(tr// 或 y//)。
eq 是字符串相等运算符;它比较两个值以确定它们在被视为字符串时是否相等。有一个对等的== 运算符仅将值视为数字来执行相同的操作。 (在 Perl 中,字符串和数字大多可以互换,转换会根据值的使用方式自动发生。因此,当您想要比较两个值时,您必须指定要执行的比较类型。)
一般来说,$var =~ m/.../ 确定$var 的值是否匹配模式,而不是它是否等于特定值。但是,在这种情况下,模式被锚定在两端并且只包含文字字符,因此它相当于字符串比较。这里最好使用eq,因为它更清晰,更快捷。
【讨论】: