我的perl代码遇到了一个问题。 我创建了一个包'Welcome.pm'并在脚本'hello.pl'中使用它。但是低于错误'Undefined subroutine& main :: First在hello.pl第6行调用' 我也查看了其他答案,但仍然无法弄清楚代码有什么问题。
有人可以帮忙吗?
perl模块Welcome.pm
package Welcome;
use strict;
use warnings;
use base 'Exporter';
my @ISA = qw(Exporter);
my @EXPORT = qw(First);
sub First{
print "welcome\n\n";
}
1;
perl脚本hello.pl
#!usr/bin/perl
use UsersModules::Welcome qw(First);
use strict;
use warnings;
First();
答案 0 :(得分:6)
文件名和包名必须绑定,所以声明
package UsersModules::Welcome
必须出现在文件
中UsersModules/Welcome.pm
@ISA
数组需要是包变量(用our
声明)而不是词法变量,而不是操纵它直接最好
use parent 'Exporter';
但是,最好的选择是从import
导入 Exporter
子例程而不是继承它,所以你可以只写
use Exporter 'import';
@EXPORT
数组也必须是包变量
喜欢这个
package UsersModules::Welcome;
use strict;
use warnings;
use Exporter 'import';
our @EXPORT = qw/ First /;
sub First{
print "welcome\n\n";
}
1;
如果要导入@EXPORT
列表中指定的子例程,则无需在use
语句中提及该子例程。 (如果您已将其放在@EXPORT_OK
列表中,则必须在use
语句中对其进行命名。)
与上述模块一起,这个主程序可以正常工作
#!usr/bin/perl
use strict;
use warnings;
use UsersModules::Welcome;
First();
welcome