【发布时间】:2012-08-30 17:44:30
【问题描述】:
我每隔一段时间就会遇到这个问题。出于某种原因,我在尝试调用导出的子程序时收到“未定义的子程序”错误,我不知道为什么,因为它似乎是在成熟的代码中突然发生的。
上次发生这种情况时,我想我使用了类似“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 日志,但似乎没有什么特别突出的,但会努力解决我发现的任何问题。我也会看看我是否可以获得更多警告。
除此之外,下一步您有什么建议?
谢谢!
【问题讨论】:
-
我忘了提到警告和诊断没有返回任何东西......我刚刚收到错误消息。
-
您发布的代码非常适合我(使用简单的主程序
use strist; use package_1; local_sub();,因此您应该尝试找出示例代码中缺少的内容以使其失败。 -
问题似乎出在第一个“使用”的第三个文件上。注释掉“use”行解决了这个问题,所以我想知道这个文件是否有什么奇怪的地方,比如 DOS CR。我会继续挖掘!
标签: perl export undefined subroutine