Perl中/.../和m /.../之间的区别

时间:2017-07-04 12:25:37

标签: 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";  }

但是,我在这个网站上查了Reference并不清楚理解

2 个答案:

答案 0 :(得分:11)

没有区别。如果您只提供/PATTERN/,则会假定为m。但是,如果您使用其他分隔符,则需要提供m。例如。 m|PATTERN|无法以|PATTERN|的身份工作。

在您的示例中,i是修饰符,因为它位于模式之后。 m是操作。 (而不是stry等。)

也许有些令人困惑 - 你可以使用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