Perl中的qr/和m/之间有什么区别



来自Perldoc:

qr/STRING/msixpodualn

此运算符将其STRING作为正则表达式引用(并可能编译(表示STRING的插值方式与中的PATTERN相同m/图案/。

m/PATTERN/msixpodualngc
/PATTERN/msixpodualngc

在字符串中搜索模式匹配,并在标量上下文中返回如果成功则为true,如果失败则为false。如果没有通过指定字符串=~或!~运算符,则搜索$_字符串。(字符串用=~指定不必是左值--它可能是表达式求值,但请记住=~绑定相当紧密。(看见还有佩尔雷。

选项如上文qr//所述

我肯定我错过了一些显而易见的东西,但我根本不清楚这些选项有什么不同——它们看起来基本上是同义的。您什么时候使用qr//而不是m//,反之亦然?

m//运算符用于匹配,而qr//生成一个模式(作为字符串(,您可以将其粘贴在变量中并存储以备以后使用。这是一个引用的正则表达式模式。

这种预编译方式有助于优化运行时成本,例如,如果您在具有数百万次迭代的循环中使用固定模式,或者您希望在函数调用之间传递模式或在调度表中使用模式。

# match now
if ( $foo =~ m/pattern/ ) { ... }
# compile and use later
my $pattern = qr/pattern/i;
print $pattern;                      # (?^ui:pattern)
if ($foo =~ m/$pattern/) { ... }

字符串(在本例中为(?^ui:pattern)(的结构在perlre中进行了解释。基本上,(?:)创建了一个具有内置标志的子模式,而^则说明不应该具有哪些标志。您也可以在其他模式中使用它,例如,为模式的某些部分打开和关闭不区分大小写的功能。

相关内容

  • 没有找到相关文章

最新更新