这两条线有什么区别?
if ($data =~ m/$str/) {
#### ^--- HERE
print "OK";
}
和
if ($data =~ /$str/) {
print "OK";
}
完全不同只是一个' m'
答案 0 :(得分:4)
m
表示您即将使用匹配的正则表达式,而不是使用音译或其他可与/
一起使用的运算符替换。如果您使用/
作为分隔符,那么m
是可选的。独立/
假定为m
。如果您想使用其他符号作为m
等正则表达式的引号,则$str =~ m|$regexp|
是必需的。如果regexp里面包含大量/
,那么这对于编写更易读的代码很有用,所以你不必引用它们。
此外,可以使用m
指定的其他一些分隔符将以不同方式处理引用的字符串。
http://perldoc.perl.org/perlop.html#Regexp-Quote-Like-Operators
使用m,您可以使用任何一对非空格(ASCII)字符 作为分隔符。这对于匹配路径名特别有用 含有“/”,以避免LTS(倾斜牙签综合征)。如果“?”是 分隔符,然后是仅匹配一次的规则,如下所述 M'模式?下面。如果“'”(单引号)是分隔符,则不 在PATTERN上执行插值。使用角色时 在标识符中有效,在m之后需要空格。