在Perl中,以下代码段之间是否存在任何技术差异?它们似乎表现相同。
my $str = "A cat is red";
if($str =~ /cat/) {
print "Matches\n";
}
对比
my $str = "A cat is red";
if($str =~ m/cat/) {
print "Matches\n";
}
这段代码的差异在于第三行的 "m"。为什么有些人会省略或不省略这个 "m"?
参见RegExp Quote-Like Operators文档:它们是相同的。 m
"版本"允许您使用其他字符代替斜杠/
作为分隔符。 但是除此之外,没有区别。
m//
、s///
、tr//
、qr//
、qw//
、q//
、qq//
等。我发现在阅读代码时保持一致性更容易让人眼睛舒服。 - Chrism##
。 - Chris/
作为分隔符,除了正则表达式操作符和 tr
。不同的东西之间的一致性是一件坏事。不同的东西应该看起来不同。 - ikegami没有区别。
/.../
是 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://}
@array = m/(\w+)/g;
这可能是一个常见的用法。 - user557597