2010-11-10 71 views
4

我是新來的Perl所以這也許是很愚蠢的問題,但我無法找出:(//和m //是否有區別?

如果我有:

$stringA =~ /regex/; 
$stringB =~ m/regex/; 

從我的測試,$stringA = $stringB有什麼它們之間的區別?

感謝。

+3

避免使用'$ a'和'$ b'作爲變量名是個好主意,因爲它們都被Perl'特別'處理。 – Zaid 2010-11-10 05:55:55

+3

以供參考,避免使用'$ a'和'$ b',請參閱http://perldoc.perl.org/perlvar.html – 2010-11-10 06:46:59

回答

0

他們都是一樣的。

匹配運算符。在開始分隔符之前,這是「匹配」運算符。它意味着讀取=〜左邊的字符串表達式,並查看它的任何部分是否與m後面的分隔符內的表達式匹配。請注意,如果分隔符是斜槓(這是事務的正常狀態),那麼m是可選的並且通常不包括在內。無論是否存在,它仍然是一個匹配操作。

Source

+1

雖然此鏈接可能回答問題,但最好包含答案的基本部分並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 – LaGrandMere 2012-11-13 15:34:37

+0

@LaGrandMere感謝您的信息。我修復了我的答案。你介意不投票嗎?謝謝。 – jordanbtucker 2012-11-13 19:47:11

+1

我沒有downvote,我只是發表評論,有一個更好的答案爲OP ...因爲你已經更新了你的答案,我要upvote :) – LaGrandMere 2012-11-14 08:34:07

7

m/PATTERN//PATTERN/是相同的。

請參閱perlop(perl操作員)手冊頁的this part。向下滾動到m/PATTERN/的部分,您會看到它也被稱爲/PATTERN/

9

這是一個簡寫。當您使用分隔符//時,可以省略m。請注意,您還可以使用其它字符分隔,像!,但你需要使用行動:

if ($something =~ m!//this/has/a/ton/of//characters/in/it!) 

通常最好要做到這一點,因爲它節省了寫\/\/一遍又一遍,你就需要如果你使用//的話。

+5

當選擇自己的分隔符時,不要忘記''''和'?'在與'm'一起使用時有特殊的含義。參見[perlop](http://perldoc.perl.org/perlop.html#m/PATTERN/msixpogc)。 – cjm 2010-11-10 10:10:43

相關問題