Perl导出的函数不起作用

dal*_*sam 0 perl

假设我有这个模块:

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中的子导入它工作正常.

那么导入的问题是什么,或者在导出函数时应该如何使用它.

hob*_*bbs 5

您使用import自己的方法覆盖Exporter的方法,实际上不会导出任何东西,它只是打印到stdout.要么不这样做(重点是什么?)或者要求$class->export_to_level(1, @_)确保调用Exporter的东西.您需要使用export_to_level而不是SUPER::import,因为您自己的import方法添加了一个调用者框架,并且没有被告知,导出器将导出到错误的位置.