module.pm
package module;
use 5.012;
use warnings;
sub Parse
{
return 1;
}
1;
script.pl
#!/usr/bin/perl -w
use 5.012;
use warnings;
use lib 'C:/';
use module;
print Parse("value");
标准输出
Undefined subroutine &main::Parse
答案 0 :(得分:6)
你需要写:
print module::Parse("value");
或更改module
包以导出名称Parse
。
有关从模块导出符号的指导,请参阅http://perldoc.perl.org/perlmod.html#Perl-Modules。
(顺便说一句,您应该为模块命名Module
而不是module
。小写模块名称用于Perl内置功能,如use warnings
和{{1} }。)
答案 1 :(得分:2)
有几件事:
首先,使用Local
作为模块前缀。这样,如果您在Perl安装中碰巧有一个具有相同名称的模块,它将使用您的。称之为“Local :: Module”。然后,创建一个Local
目录,并将模块命名为Module.pm
。
您必须了解的另一件事是您在另一个名称空间中定义您的模块。默认情况下,在您使用main
语句之前,所有内容都位于package
命名空间中。这会创建程序包使用的另一个名称空间。这样,如果您的包具有函数foo
,并且您已在主程序中定义了函数foo
,则它们不会发生冲突。
因此,您有两个选择:One(现在是首选)是简单地调用您的子例程,并在其前面加上完整的包名。第二种是将子程序名称导出到主程序。这可能会导致重复名称出现问题,但每次调用子例程时都不必一直输入包名称。
# /usr/bin/env perl
# Local/Module.pm
package Local::Module;
use strict;
use warnings;
sub Parse {
my $value = shift; #Might as well get it.
print "I got a value of $value\n";
return $value;
}
1; #Need this or the module won't load
# /usr/bin/env perl
# program.pl
use strict;
use warnings;
use Local::Module;
Local::Module::Parse("Foo");
# /usr/bin/env perl
# Local/Module.pm
package Local::Module;
use strict;
use warnings;
use Exporter qw(import);
our @EXPORT_OK(Parse); #Allows you to export this name into your main program
sub Parse {
my $value = shift; #Might as well get it.
print "I got a value of $value\n";
return $value;
}
1; #Need this or the module won't load
# /usr/bin/env perl
# program.pl
use strict;
use warnings;
use Local::Module qw(Parse);
Parse("Foo");