未定义的子程序& main ::首先在hello.pl第6行调用

时间:2016-01-30 19:50:11

标签: perl

我的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();

1 个答案:

答案 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