微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决除非使用 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 举报,一经查实,本站将立刻删除。