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”?
答案 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。
中