这是一个非常基本的问题,但我找不到任何适当的文档来解释这种行为。
("Johnson" =~ /son/ )
返回true,但(/son/ =~ "Johnson")
返回false。究竟是什么原因?当操作数互换时,为什么=〜运算符的行为不同?
答案 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