gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:02:14 25 4
gpt4 key购买 nike

我的 perl 代码遇到了一个问题。我创建了一个包“Welcome.pm”并在脚本“hello.pl”中使用它。但低于错误“未定义的子程序 &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();

最佳答案

文件名和包名必须捆绑在一起,所以声明

package UsersModules::Welcome

必须出现在文件中

UsersModules/Welcome.pm

@ISA 数组需要是包变量(用our 声明)而不是词法变量,但最好不要直接操作它

use parent 'Exporter';

但是,最好的选择是import Exporter 中的import 子例程,而不是继承它,这样你就可以只写

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

关于perl - 未定义的子程序 &main::首先在 hello.pl 第 6 行调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35106329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com