他们似乎是used interchangeably in the documentation。即使是在意图中,有什么不同吗?
答案 0 :(得分:10)
作为链接到州的文档,
m/abc/; # a regex that is immediately matched against $_ rx/abc/; # a Regex object /abc/; # a Regex object
[...]
m/ /
和/ /
运营商之间差异的示例:my $match; $_ = "abc"; $match = m/.+/; say $match; say $match.^name; # OUTPUT: «「abc」Match» $match = /.+/; say $match; say $match.^name; # OUTPUT: «/.+/Regex»
因此/.../
会返回一个Regex
对象,该对象可作为值传递,并可用于稍后和多次匹配,m/.../
会返回Match
已立即执行比赛的对象。当您打印Match
对象时,您将获得匹配的结果,并且当您打印Regex
对象时,您将获得正则表达式的文本表示。在Perl 6中使用m/.../
可以访问隐式Match
对象$/
:
匹配结果存储在
$/
变量中,也会从匹配中返回。如果匹配成功,则结果为Match
;否则为Nil
。
这种区别与Python的re.compile
与re.match
/re.search
相当,Perl 5中存在类似的区别,您可以使用qr/.../
与{{m/.../
存储和重复使用正则表达式1}}和/.../
用于直接匹配。正如@raiph指出的那样,并非所有m/.../
和/.../
都会导致直接匹配。相反,Perl 5 precompiles literal (static) regexes即使没有明确要求它。 (据推测,Perl 6也会执行此优化。)