我正在尝试在应用程序中使用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的强大功能的同时允许正常的正则表达式?
答案 0 :(得分:4)
您无法卸载模块。模块只是一个脚本。卸载模块就是不执行它。
但是,此模块确实充当了词法编纂,因此您可以轻松限制其效果范围。
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;
也是词法范围的。