我正在编写一个perl模块,其中涉及一些非常复杂的正则表达式,而没有工具可以帮助我,几乎不可能调试。我认为Regexp::Debugger
模块将是工作的理想工具,但它似乎仅在.pl
脚本中起作用,并且似乎在.pm
模块中不起作用。
例如,这有效:
test.pl
use strict;
use warnings;
use Regexp::Debugger;
my $text = "text";
if ($text =~ /tex/) {
print "Match!";
}
我得到了预期的调试功能。
但是第二个我将perl模块引入混合物不再有效:
test.pl
use strict;
use warnings;
use TestModule;
TestModule::func();
testmodule.pm
package TestModule;
use strict;
use warnings;
use Regexp::Debugger;
sub func {
my $text = "text";
if ($text =~ /tex/) {
print "Match!";
}
}
1;
试图运行此代码给出以下错误:
无法在Regexp/debugger.pm 160
上使用未定义的值作为哈希参考
仅在" test.pl"文件中仅包含 Regexp::Debugger
,而是因为它不尝试在包含的模块中调试REGEXES。
我如何才能使其工作,以便我可以在正在处理的模块中调试Regexes?
更新:
已提交了一个错误报告,并且CPAN上可以使用新版本(V0.002001),可以按预期工作。:)
这似乎是Regexp :: Debugger检查词汇提示时的错误,但我不确定如何修复它。供参考,https://metacpan.org/source/dconway/regexp-debugger-0.002000/lib/regexp/debugger.pm#l160 is:
my $lexical_scope = (caller 1)[10]{'Regexp::Debugger::lexical_scope'};
也许应该做((caller 1)[10] || {})->{'Regexp::Debugger::lexical_scope'}
?
无论如何,我能够重现您的问题,并且找到了解决方法。在test.pl
中,做:
use strict;
use warnings;
no Regexp::Debugger;
use TestModule;
即。在use TestModule
之前加载Regexp::Debugger
,但使用no
而不是use
来避免为主程序激活它。
随着这种更改,我得到了:
TestModule.pm did not return a true value at test.pl line 4.
BEGIN failed--compilation aborted at test.pl line 4.
...这仍然是一个错误,但这是一个很好的错误。这意味着Regexp::Debugger
没有问题。
如果我在TestModule.pm
末尾添加1
的线,一切都起作用。
更新: op报告了问题,并在Regexp :: Debugger的0.002001中修复了。