Perl匹配运算符=〜

时间:2016-09-29 07:51:35

标签: perl

这是一个非常基本的问题,但我找不到任何适当的文档来解释这种行为。

("Johnson" =~ /son/ )返回true,但(/son/ =~ "Johnson")返回false。究竟是什么原因?当操作数互换时,为什么=〜运算符的行为不同?

2 个答案:

答案 0 :(得分:4)

STRAIGHT OUTTA DOCS:

  

最简单的正则表达式只是一个单词,或者更一般地说是一串单词   字符。由单词组成的正则表达式匹配任何字符串   包含这个词:

"Hello World" =~ /World/;  # matches 
  

这个Perl声明到底是什么? "Hello World"是一个简单的双引号字符串。 World是   正则表达式和//括起/World/告诉Perl   搜索字符串以查找匹配项。 运算符=~关联字符串   使用正则表达式匹配并在正则表达式匹配时生成真值   如果正则表达式不匹配,则为false。在我们的例子中,World匹配   "Hello World"中的第二个单词,所以表达式为真。

请阅读http://perldoc.perl.org/perlretut.html

现在在您的示例中"Johnson" =~ /son/匹配,因为=~(其为儿子)的RHS在LHS(约翰逊)中找到。如果/son/ =~ "Johnson"在LHS(儿子)中找不到RHS(约翰逊)。

答案 1 :(得分:2)

嗯...因为=〜运算符将标量表达式绑定到模式匹配。

因此它说明了需要给出参数的顺序。你的第二个(/son/ =~ "Johnson")使用约翰逊作为模式...并且那个没有被击中,因此是假的。

请参阅绑定运算符:https://users.cs.cf.ac.uk/Dave.Marshall/PERL/node87.html