如何在perl模块中使用perl模块中的子例程

时间:2016-06-17 09:23:01

标签: perl perl-module

我需要帮助来访问perl模块中perl脚本中存在的子例程。

getHosts() getIP()子程序存在于/tmp/utils/Utili.pl(perl脚本)中。

当我编译master.pl时,我得到 Undefined subroutine& Modules :: test2 :: getIP在/tmp/Modules/test2.pm

getIP()子例程出现在 /tmp/utils/Utili.pl perl脚本中。

我无法承担将 /tmp/utils/Utili.pl 更改为perl模块的风险,因为它已在数百个脚本中使用,需要大量的测试工作。

有人可以帮我解决这个问题。?

此外,它不仅是这个子程序,无论在/tmp/utils/Utili.pl perl脚本中存在什么子程序,如果我在test2.pm中调用我都会得到相同的错误。如果我在两个模块中调用test1.pm,同样的子程序正在工作,我使用下面的行来访问子程序。

require "/tmp/utils/Log.pl";
require "/tmp/utils/Utili.pl";

请在下面找到sudo代码。

示例:

主脚本:master.pl

在master.pl iam中调用perl模块“test1.pm”和“test2.pm”中的新子例程,如下所示。

use strict;
use warnings;

use lib "/tmp";

use Modules::test1;
use Modules::test2;

my $installation1 = Modules::test1->new();

my $installation2 = Modules::test2->new();

[下载] test1.pm:

在“test1.pm”中我有以下代码,

package Modules::test1;

use strict;
use warnings;

require "/tmp/utils/Log.pl";
require "/tmp/utils/Utili.pl";

my @Hosts=getHosts();

sub new()

{

print "inside new\n";

}

[下载] test2.pm

在“test2.pm”中我有以下代码,

package Modules::test2;

use strict;
use warnings;

my @IP=getIP();

require "/tmp/utils/Log.pl";
require "/tmp/utils/Utili.pl";

sub new()
{

print "inside new\n";

}

1 个答案:

答案 0 :(得分:1)

require在运行时发生,因此在此代码中:

my @IP=getIP();

require "/tmp/utils/Log.pl";
require "/tmp/utils/Utili.pl";
尚未从getIP()文件加载

Utili.pl,因此它正在查找该子文件自身的范围。移动东西,以便在调用它们之前加载子:

require "/tmp/utils/Log.pl";
require "/tmp/utils/Utili.pl";

my @IP=getIP();