假设我有这个模块:
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;
Run Code Online (Sandbox Code Playgroud)
并由此脚本App.cgi使用:
#!/usr/bin/perl
use MyApp;
msg();
Run Code Online (Sandbox Code Playgroud)
如果我运行这个App.cgi我得到这个错误:
undefined subroutine &main::msg in App.cgi at line 3
Run Code Online (Sandbox Code Playgroud)
如果我重命名或删除包MyApp.pm中的子导入它工作正常.
那么导入的问题是什么,或者在导出函数时应该如何使用它.
您使用import自己的方法覆盖Exporter的方法,实际上不会导出任何东西,它只是打印到stdout.要么不这样做(重点是什么?)或者要求$class->export_to_level(1, @_)确保调用Exporter的东西.您需要使用export_to_level而不是SUPER::import,因为您自己的import方法添加了一个调用者框架,并且没有被告知,导出器将导出到错误的位置.