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

问题描述:

我有一个模块名为Helpers.pm从模块调用函数时,为什么会收到错误消息“Undefined subroutine”?

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. 

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

你可能忘了包声明从

package Helpers; 

改变:

package TestDir::Helpers; 
+0

+1:这很可能是问题所在。其他一切似乎都被正确地改变了。 – Borodin 2012-03-10 09:56:01

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

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

我在这种情况下,错误消息会是这样想:'无法找到...'。 – 2012-03-10 10:18:10

+0

我之前测试过它。实际上,它工作。 – 2012-03-10 10:21:17

+0

好的,我误解了你的帖子。 – 2012-03-10 17:27:56