/.../
和m/.../
之间有什么区别?
use strict;
use warnings;
my $str = "This is a testing for modifier";
if ($str =~ /This/i) { print "Modifier...\n"; }
if ($str =~ m/This/i) { print "W/O Modifier...\n"; }
但是,我在这个网站上查了Reference并不清楚理解
答案 0 :(得分:11)
没有区别。如果您只提供/PATTERN/
,则会假定为m
。但是,如果您使用其他分隔符,则需要提供m
。例如。 m|PATTERN|
无法以|PATTERN|
的身份工作。
在您的示例中,i
是修饰符,因为它位于模式之后。 m
是操作。 (而不是s
,tr
,y
等。)
也许有些令人困惑 - 你可以使用m
作为修饰符,但前提是在匹配后。
m/PATTERN/m
会导致^
和$
的匹配方式与m/PATTERN/
中的匹配方式不同,但它是执行此操作的尾随m
,而不是领先的。
答案 1 :(得分:5)
Perl有许多类似报价的运算符,您可以在其中选择分隔符以适合您传递给运营商的数据。
q(...)
创建单引号字符串qq(...)
创建双引号字符串qw(...)
通过在white-space qx(...)
执行命令并返回输出qr(...)
编译正则表达式m(...)
将其参数与正则表达式相匹配(还有s(...)(...)
但我已将其从列表中删除,因为它有两个参数)
对于其中一些,如果选择默认分隔符,则可以省略运算符开头的字母。
q
),则可以省略'...'
。qq
),则可以省略"..."
。qx
),则可以省略`...`
。m
),则可以省略/.../
。因此,要回答原始问题,m/.../
和/.../
是相同的,但由于斜杠是匹配运算符的默认分隔符,因此可以省略m
。