Perl导入子类后无法调用父类导出子例程的问题求助
Perl子类导入后父类导出函数无法使用的问题解决
当你使用use base qw(A)让A::B继承A时,只会继承A的面向对象方法,但不会自动继承A基于Exporter的函数导出行为。Exporter的导出逻辑是绑定到具体包的:A包的@EXPORT是告诉A的import方法,当其他包use A时要导出哪些函数到调用包(比如main);但A::B本身没有配置Exporter的导出规则,所以use A::B不会触发任何函数导出到main,自然会出现Undefined subroutine &main::format_date的错误。
解决方法(兼容Perl 5.8.8及以上)
在A/B.pm中,让A::B也继承Exporter的导出能力,并复用A的导出列表:
package A::B; use strict; use base qw(A); # 引入Exporter并继承A的导出规则 use Exporter qw(import); our @EXPORT = @A::EXPORT; # 其他A::B的代码
这样当main脚本执行use A::B时,A::B的import方法会把@EXPORT(即A的导出函数列表)里的函数导入到main包,你就能正常调用format_date()了。
可选方案
如果你只需要导出部分A的函数,也可以自定义A::B的导出列表,比如:
# A/B.pm中 our @EXPORT_OK = qw(format_date); # 需要显式导入时使用
然后在main脚本中显式指定要导入的函数:
# main.pl中 use A::B qw(format_date);
内容的提问来源于stack exchange,提问作者paymentkickball
相关产品推荐
相关产品推荐

