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”,