从模块调用函数时,为什么会出现错误消息“Undefined subroutine”?

时间:2012-03-10 08:25:56

标签: perl module

我有一个名为Helpers.pm的模块:

use warnings;
use 5.012;

package Helpers;
use Exporter qw(import);
our @EXPORT_OK = qw(my_function);

sub my_function {
    return { one => 1, two => 2 };
}

1;

在脚本中调用它:

#!/usr/bin/env perl
use warnings;
use 5.012;
use Data::Dumper;
use FindBin qw($RealBin);

use lib $RealBin;
use Helpers qw(my_function);

my $ref = my_function();
say Dumper $ref;

我没有收到任何错误消息。 但是当我将模块放在目录TestDir中时,修改脚本如下:

#!/usr/bin/env perl
use warnings;
use 5.012;
use Data::Dumper;
use FindBin qw($RealBin);

use lib $RealBin;
use TestDir::Helpers qw(my_function);

my $ref = my_function();
say Dumper $ref;

我收到此错误消息:

Undefined subroutine &main::my_function called at ./perl.pl line 10.

为什么我收到此错误消息?

2 个答案:

答案 0 :(得分:14)

您可能忘记从

更改包声明
package Helpers;

为:

package TestDir::Helpers;

答案 1 :(得分:3)

我认为这是因为它无法在lib路径中找到您的模块http://perldoc.perl.org/lib.html

use lib 'TestDir';
use Helpers qw(my_function);