假设我有这个模块:
package MyApp;
use base 'Exporter';
our @EXPORT = qw(msg);
sub import {
my ($class, @args) = @_;
my ($package, $script) = caller;
print "$package, $script\n";
}
sub msg {
print "Hello msg\n";
}
1;
并由此脚本App.cgi使用:
#!/usr/bin/perl
use MyApp;
msg();
如果我运行此App.cgi,我会收到此错误:
undefined subroutine &main::msg in App.cgi at line 3
如果我重命名或删除MyApp.pm包中的子导入,它可以正常工作。
那么导入的问题是什么,或者在导出函数时应该如何使用它。
答案 0 :(得分:5)
你用你自己的一个实际上没有导出任何内容的导出器的import
方法覆盖它,它只是打印到stdout。要么不这样做(重点是什么?)或者调用$class->export_to_level(1, @_)
以确保调用Exporter的东西。您需要使用export_to_level
而不是SUPER::import
,因为您自己的import
方法会添加调用方框架,而不会被告知,导出器会导出到错误的位置。