Regexp::D ebugger Perl 模块似乎在另一个 Perl 模块中不起作用



我正在编写一个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中修复了。

最新更新