per /中的m / PATTERN /和/ PATTERN /之间的差异

时间:2013-12-22 20:14:08

标签: regex perl match

perl中的以下代码段之间是否存在任何技术差异?他们似乎行为相同

my $str = "A cat is red";

if($str =~ /cat/) {
    print "Matches\n";
}

VS

my $str = "A cat is red";

if($str =~ m/cat/) {
    print "Matches\n";
}

此代码的不同之处在于第3行的“m”。为什么有人会省略或不省略“m”?

2 个答案:

答案 0 :(得分:22)

请参阅RegExp Quote-Like Operators文档:它们完全相同。 m“版本”允许您使用其他字符而不是/作为分隔符。但除此之外,没有区别。

答案 1 :(得分:11)

没有区别。

/.../m/.../的缩写,就像'...'q'...'的缩写,"..."qq"..."的缩写。

如果您要使用默认分隔符(/用于正则表达式匹配,'用于单引号字符串文字,"用于双引号字符串文字),可以省略前导字母。

指定前导字母可以更改分隔符。

/.../      m/.../     m!...!     m{...}        Match operator
'...'      q'...'     q!...!     q{...}        Single-quoted string literal
"..."      qq"..."    qq!...!    qq{...}       Double-quoted string literal

这对减少转义非常有用。例如,

/^http:\/\//
写为

时,

更清晰

m{^http://}

否则,通常省略“m”,“q”或“qq”。 “s”,“tr”和“qw”不是可选的。

所有这些都记录在perlop