我每隔一段时间就会遇到这个问题。出于某种原因,我在尝试调用导出的子程序时收到“未定义的子程序”错误,我不知道为什么,因为它似乎是在成熟的代码中突然发生的。
上次发生这种情况时,我想我使用了“package_2::exported_sub()”之类的东西。这一次有效,但它只是为 package_2 中的另一个子返回了一个错误。甚至把“使用package_2;” 在上面的行没有帮助!我唯一能想到的是,导出的 sub 以某种方式未定义。
我的代码看起来有点像这样:
在文件 package_1.pm 中:
package package_1;
require Exporter;
@ISA = qw( Exporter );
@EXPORT = qw(
local_sub
);
use package_2;
use strict;
use warnings;
use diagnostics;
sub local_sub {
&exported_sub;
}
在文件 package_2.pm 中:
package package_2;
require Exporter;
@ISA = qw( Exporter );
@EXPORT = qw(
exported_sub
);
use strict;
use warnings;
use diagnostics;
sub exported_sub {
# do something
}
我已经束手无策了......当这个弹出来时,我正在处理一张不相关的热门票,明天开始用户测试!
提前致谢!
更新:
ikegami,感谢您的修复!不过我很好奇。我又遇到了这个问题,但这一次我没有找到循环依赖。我把它缩小到一行:
$row->{$attr} = ' ' unless ( $row->{$attr} );
显然,该行与使用或要求根本无关!我查看了 Apache 日志,但似乎没有什么特别突出的,但会努力解决我发现的任何问题。我也会看看我是否可以获得更多警告。
除此之外,您建议下一步做什么?
谢谢!