我需要帮助来访问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";
}
答案 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();