回答
「模式\ n」 :)
$a = "pattern\n";
print "ok 1\n" if $a =~ /^pattern$/;
print "ok 2\n" if $a eq 'pattern';
也許你的意思/ ^模式\ Z /。
Jepp,對 - 這是解決方案 - 它只是一個在我的工作場所的小問題 - 我不是後端編碼器,但我很好奇 - 空白接受是區別:) – user150283 2009-09-19 10:42:23
@chronotype:一般不是空白;特別是一個換行符(「pattern \ n \ n」或「pattern \ t」不匹配)。 $(不含/ m)匹配字符串的結尾或緊跟在字符串末尾的換行符之前。 – ysth 2009-09-21 03:35:23
除了'perldoc perlop',你還可以在Github上看到'perlopref' - 一項正在進行的工作:http://github.com/cowens/perlopref – Telemachus 2009-09-17 13:20:16
正如其他人已經注意到的,($a =~ /^pattern$/)
使用正則表達式引擎來評估字符串是否相同,而($a eq 'pattern')
是純字符串相等性測試。
如果你真的只想知道兩個字符串是否相同,後者是首選的原因:
- 可讀性 - 它更簡潔,包含較少的特殊字符。
- 可維護性 - 使用正則表達式模式,您必須轉義可能出現在字符串中的任何特殊字符,或使用額外的標記,如
\Q
和\E
。用單引號字符串,你需要轉義的唯一字符是單引號。 (您也可以逃避反斜槓如果他們緊接着又反斜線或字符串分隔符。) - 性能 - 你不承擔發射了正則表達式引擎只是比較字符串的開銷。例如,如果在您的程序中發生了幾百萬次這樣的好處,那麼這個好處是值得注意的。
在另一方面,如果你需要做一些其他比一個普通的字符串相等測試正則表達式的形式表現得更爲靈活。有關正則表達式的更多信息,請參閱perldoc perlre。
編輯:像ysth先於其他大多數人,我錯過了明顯功能區別它們之間並徑直更抽象的差異。我澄清了這個問題,但我會留下答案作爲(希望)有用的參考。
=~
是綁定運算符。它用於將值綁定到模式匹配(m//
),替換(s///
)或音譯(tr//
或y//
)。
eq
是字符串相等運算符;它會比較兩個值,以確定它們在被視爲字符串時是否相等。有一個同行==
運算符只會將值視爲數字來執行相同的操作。 (在Perl中,字符串和數字大多可以自動轉換,這取決於值的使用方式,因此,如果要比較兩個值,必須指定要執行的比較類型。)
,$var =~ m/.../
確定$var
的值是否與模式匹配,而不是它是否等於特定值。然而,在這種情況下,模式錨定在兩端並且只包含文字字符,所以它相當於字符串比較。這裏最好使用eq
,因爲它更清晰快捷。
- 1. jquery中get()和eq()有什麼區別?
- 2. 「:eq()」和.eq()的區別
- 3. 「perl -n」和「perl -p」有什麼區別?
- 4. Perl中'for'和'foreach'有什麼區別?
- 5. Perl中BAREWORD和* BAREWORD有什麼區別?
- 6. Perl中$ dxyabc和$ {dxyabc}有什麼區別?
- 7. Perl中grep和map有什麼區別?
- 8. Common Lisp中的eq,eql,equal和equalp有什麼區別?
- 9. JSP中eq和==的區別
- 10. 在Scala中`null == last`和`null eq last`有什麼區別?
- 11. 「perl test.pl」和「./test.pl」有什麼區別?
- 12. 在Strawberry Perl中,perl \ lib和perl \ site \ lib有什麼區別?
- 13. 使用.first()和.eq(0)之間有什麼區別?
- 14. .eq之間的區別。和==
- 15. 有什麼區別`和$(Bash中有什麼區別?
- 16. 我的($ variableName)和我的$ variableName在Perl中有什麼區別?
- 17. EasyMock中'same'和'eq'之間的區別
- 18. Perl中的子程序和腳本有什麼區別?
- 19. Perl中的\ L和lc函數有什麼區別?
- 20. C和Perl中的system()有什麼區別?
- 21. Perl正則表達式中的\ 1和$ 1有什麼區別?
- 22. Perl中的open和sysopen有什麼區別?
- 23. Perl中的system,exec和反引號有什麼區別?
- 24. Perl中的新Some :: Class和Some :: Class-> new()有什麼區別?
- 25. Perl中的對象和類之間有什麼區別?
- 26. Perl中的哈希和哈希引用有什麼區別?
- 27. 在Perl中,`use lib`和`lib-> import`有什麼區別?
- 28. 在perl中,$ DB :: single = 1和2有什麼區別?
- 29. Perl中詞法和動態範圍界定有什麼區別?
- 30. perl -d中x和p有什麼區別?
謝謝你的答案! – user150283 2009-09-17 13:31:34