我正在尝试使用 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;
也是词法范围的。
关于regex - 加载 Regexp::Grammars 后使用 "normal"正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13557180/