Perl导出的函数不起作用

时间:2014-04-13 07:36:09

标签: 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;

并由此脚本App.cgi使用:

#!/usr/bin/perl
use MyApp;
msg();

如果我运行此App.cgi,我会收到此错误:

undefined subroutine &main::msg in App.cgi at line 3

如果我重命名或删除MyApp.pm包中的子导入,它可以正常工作。

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

1 个答案:

答案 0 :(得分:5)

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