2016-09-29 92 views
-12

这是一个非常基本的问题,但我无法找到解释此行为的任何适当文档。Perl匹配运算符=〜

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

+0

在我发现使用Google http://www-cgi.cs.cmu.edu/afs/cs/user/rgs/mosaic/pl-exp-op.html的文档中提到了它。为什么没有为你工作? – PeeHaa

+2

http://learn.perl.org –

+2

相关:http://perldoc.perl.org/perlop.html#Binding-Operators – Theraot

回答

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" RHS(Johnson)在LHS(儿子)中找不到。

2

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

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

见结合操作符:https://users.cs.cf.ac.uk/Dave.Marshall/PERL/node87.html