perl中的以下代码段之间是否存在技术差异?他们似乎行为相同
my $str = "A cat is red";
if($str =~ /cat/) {
print "Matches\n";
}
Run Code Online (Sandbox Code Playgroud)
VS
my $str = "A cat is red";
if($str =~ m/cat/) {
print "Matches\n";
}
Run Code Online (Sandbox Code Playgroud)
这段代码的不同之处在于第3行的"m".为什么有人省略或不省略"m"?
Mat*_*Mat 22
请参阅RegExp Quote-Like Operators文档:它们完全相同.在m"版本"允许您使用其它字符,而不是/作为分隔符.但除此之外,没有区别.
ike*_*ami 11
没有区别.
/.../是短暂的m/.../,就像'...'是短暂的q'...',"..."是短暂的qq"...".
如果您要使用默认分隔符(/对于正则表达式匹配,'对于单引号字符串文字和"双引号字符串文字),您可以省略前导字母.
指定前导字母可以更改分隔符.
/.../ m/.../ m!...! m{...} Match operator
'...' q'...' q!...! q{...} Single-quoted string literal
"..." qq"..." qq!...! qq{...} Double-quoted string literal
Run Code Online (Sandbox Code Playgroud)
这对减少转义很有用.例如,
/^http:\/\//
Run Code Online (Sandbox Code Playgroud)
写作时更清楚
m{^http://}
Run Code Online (Sandbox Code Playgroud)
否则,通常省略"m","q"或"qq"."s","tr"和"qw"不是可选的.
所有这些都记录在perlop中.