我正在尝试在应用程序中使用Regexp::Grammars,但是它破坏了许多其他正则表达式。例如,以下代码:
$hello = 'hello';
print 'hello 1' if $hello =~ /hello/; #prints "hello 1"
use Regexp::Grammars;
print 'hello 2' if $hello =~ /hello/; #prints nothing
证明我的问题。除了重复加载和卸载模块外,我不确定如何处理它,甚至在用
no
显式卸载模块后,我甚至不确定是否可以使用扩展的正则表达式。如何在仍获得Regexp :: Grammars功能的同时允许正则表达式? 最佳答案
您无法卸载模块。模块只是一个脚本。卸载模块就是取消执行它。
但是,此模块确实充当词法编译指示,因此您可以轻松限制其作用范围。
my $grammar = do {
use Regexp::Grammars;
qr{
...
}x;
# Active here
};
# Not active here
在Regexp :: Grammars处于活动状态的情况下创建的语法可以在Regexp :: Grammars不处于活动状态的情况下使用,因此仅在定义了语法的情况下使Regexp :: Grammars处于活动状态。 (此模块的界面差强人意!)
如果您的代码组织不好,因此您需要禁用Regexp :: Grammars中段,则也可以通过使用
no Regexp::Grammars;
请注意,效果
no Regexp::Grammars;
也在词法范围内。