除非使用 Moo 的模块首先启动,否则 DateTime 不会正确加载

问题描述

我正在清理代码并从 Perl 脚本中删除了现已弃用的 Forecast::IO 模块。当我这样做时,我开始收到此错误

[root@server cgi-bin]# perl Weather.pm
Undefined subroutine &B::perlstring called at /usr/local/share/perl5/Params/ValidationCompiler/Compiler.pm line 248.
Compilation Failed in require at /usr/local/lib64/perl5/DateTime.pm line 13.
BEGIN Failed--compilation aborted at /usr/local/lib64/perl5/DateTime.pm line 13.
Compilation Failed in require at Weather.pm line 1340.
BEGIN Failed--compilation aborted at Weather.pm line 1340.

发生错误的第 1340 行是无害的,use DateTime;

我不确定 DateTime 会做什么会导致它不高兴我不再使用无关的 Forecast::IO 模块,所以我开始拆开后一个模块找出阻止错误代码。重要的部分似乎是 Moo 包含在 Forecast::IO 中并且它至少有一个 Moo has 声明:

package Forecast::IO;
use Moo;
has testkey => ( is => 'ro' ); 
1;

出于某种原因,如果存在至少包含这些行的模块,则 DateTime 加载正常。否则,我上面提到的错误就会发生,在 DateTime 的第 13 行 use Carp; 上窒息。即使我将 use Moo; has testkey => ( is => 'ro' ); 放入我自己的模块中,它也会在 use DateTime 处失败。

即使我已经使用 grep -r Forecast::IO 遍历代码库以查找一些错误的引用并得到空的引用。因此,我决定尝试只是加载 DateTime 模块:perl -MDateTime。这也会产生错误

[root@server cgi-bin]# perl -MDateTime
Undefined subroutine &B::perlstring called at     /usr/local/share/perl5/Params/ValidationCompiler/Compiler.pm line 248.
Compilation Failed in require at /usr/local/lib64/perl5/DateTime.pm line 13.
BEGIN Failed--compilation aborted at /usr/local/lib64/perl5/DateTime.pm line 13.
Compilation Failed in require.
BEGIN Failed--compilation aborted.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)