为什么$_ =?“正则表达式”在Perl中有效?
我知道在Perl中,最常见的有效正则表达式是这样的:
$_ =~ m/regular expression/; # and "m" can be omit $_ =~ /regular expression/; 我可以使用qr创建一个正则表达式引用,如下所示: my $regex = qr/regular expression/; $_ =~ m/$regex/; # and "m//" can be omit: $_ =~ $regex; 但我试过这个: my $str = "regular expression"; $_ =~ $str; # why this is valid? 它没有给我任何错误信息,并且工作正常.我不知道为什么,我认为应该是这样的: my $str = "regular expression"; $_ =~ m/$str/; # or my $str = "regular expression"; my $regex = qr/$str/; $_ =~ $regex; 谁能解释为什么$_ =?$str在Perl中有效? 解决方法
它说在
“The basics” in perlre下
(以及错误的tt`) 因此,变量中的模式不需要分隔符.操作符=?在“Binding operators” in perlop讨论过
(以我为重点)
运算符不关心右侧的分隔符,并且可以在运行时从表达式中形成“正则表达式”. 第“Gory details of parsing quoted constructs” in perlop节除此之外,还有助于解决这个问题.识别出引用的构造并插入包含的文本之后,它将弹出“解析正则表达式”的子弹
(我的重点) 这是关于Perl如何处理引用构造和的一般讨论 我建议不要这样做;像你期望的那样使用qr.首先,使用字符串(而不是使用qr构建的正则表达式)是有限的.而且,它更容易出现愚蠢的错误. 请注意,虽然对于许多模式,可以使用qr或“”(或其运算符形式qq())来准备模式(或将以这种方式解释的字符串) – 它们不相同.他们的引用规则非常相似,但是qr准备了一个正则表达式,如Regexp Quote-Like Operators所示
首先,回想一下,使用qr可以使用修饰符. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |