2016-09-29 72 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