Perl中/../和m/../之间的差异
Perl中/../和m/../之间的差异,perl,Perl,/…/和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"; } 然而,我在这个网站上查了一下,因为我没有清楚地理解这个理论,所以没有区别。如果您只提供/PATTERN/,那么它假
/…/
和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"; }
然而,我在这个网站上查了一下,因为我没有清楚地理解这个理论,所以没有区别。如果您只提供
/PATTERN/
,那么它假定为m
。但是,如果使用的是替代分隔符,则需要提供m
。例如,m | PATTERN |
不能像| PATTERN |
那样工作
在您的示例中,i
是修改器,因为它位于模式之后m
是操作。(与s
、tr
、y
等相对)
也许有点让人困惑-你可以使用m
作为修饰语,但前提是你在匹配后加上if
m/PATTERN/m
将导致^
和$
的匹配方式不同于m/PATTERN/
中的匹配方式,但执行此操作的是后面的m
,而不是前面的 Perl有许多类似引号的运算符,您可以根据要传递给运算符的数据选择分隔符
创建一个带引号的字符串q(…)
创建双引号字符串qq(…)
通过在空白处拆分参数来创建列表qw(…)
执行命令并返回输出qx(…)
编译正则表达式qr(…)
将其参数作为正则表达式进行匹配m(…)
s(…)(…)
但是我没有列出,因为它有两个参数)
对于其中一些,如果选择默认分隔符,则可以省略运算符开头的字母
- 如果使用单引号字符(
),则可以省略“…”
)q
- 如果使用双引号字符(
),则可以省略“…”
)qq
- 如果使用反勾号(
),则可以省略`…`
qx
- 如果使用斜杠(
),可以省略/…/
m
因此,为了回答您的原始问题,
m/../
和/…/
是相同的,但是由于斜杠是匹配运算符的默认定界符,您可以省略m
m
这里是匹配运算符,i
是一个修饰符。是操作员的文档,没有区别/…/
是m/../
的快捷方式,就像“…”
是qq“…”
的快捷方式一样。当模式包含转义字符时会有所不同。例如,m“\d”和“\\d”是相同的,但不是m“\d”和“\d”,