這是一個非常基本的問題,但我無法找到解釋此行爲的任何適當文檔。Perl匹配運算符=〜
("Johnson" =~ /son/)
返回true,但(/son/ =~ "Johnson")
返回false。確切的原因是什麼?當操作數互換時,爲什麼=〜運算符的行爲不同?
這是一個非常基本的問題,但我無法找到解釋此行爲的任何適當文檔。Perl匹配運算符=〜
("Johnson" =~ /son/)
返回true,但(/son/ =~ "Johnson")
返回false。確切的原因是什麼?當操作數互換時,爲什麼=〜運算符的行爲不同?
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(兒子)中找不到。
呃...因爲=〜運算符將一個標量表達式綁定到模式匹配。
因此它說明了需要給出參數的順序。你的第二個(/son/ =~ "Johnson")
使用約翰遜作爲模式...並且一個沒有被擊中,因此是錯誤的。
見結合操作符:https://users.cs.cf.ac.uk/Dave.Marshall/PERL/node87.html
在我發現使用Google http://www-cgi.cs.cmu.edu/afs/cs/user/rgs/mosaic/pl-exp-op.html的文檔中提到了它。爲什麼沒有爲你工作? – PeeHaa
http://learn.perl.org –
相關:http://perldoc.perl.org/perlop.html#Binding-Operators – Theraot