从模块调用函数时,为什么会收到错误消息“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;
我认为这是因为它无法在lib路径找到你的模块,http://perldoc.perl.org/lib.html。
use lib 'TestDir';
use Helpers qw(my_function);
我在这种情况下,错误消息会是这样想:'无法找到...'。 – 2012-03-10 10:18:10
我之前测试过它。实际上,它工作。 – 2012-03-10 10:21:17
好的,我误解了你的帖子。 – 2012-03-10 17:27:56
+1:这很可能是问题所在。其他一切似乎都被正确地改变了。 – Borodin 2012-03-10 09:56:01