我希望我的代码在特定迭代后从递归子例程中逃脱
这是我的测试代码:
#!/usr/bin/perl
use strict;
&sub();
my $count = 0;
sub sub
{
if ( $count lt 1 )
{
print "This statment is visible \n";
$count++;
&sub();
}
else
{
return;
}
}
这给出了以下输出,我对此感到满意:
This statment is visible
但如果我使用#!/usr/bin/perl -w
,那么它会给我 hte 输出,但也会给我一个警告:
Use of uninitialized value $count in string lt at sub.pl line 9.
This statment is visible
问题 1:如何摆脱上述警告。
现在,上面的代码是我的测试代码,我想将相同的逻辑应用于下面的实际代码:
简而言之,我想将 a 解析hostname
为它的IP address
. 如果它不起作用,那么我想将其附加domain name (.my.company.net)
到hostname
然后尝试名称解析。
但是,我上面的代码(在某些情况下,不知道为什么)进入无限深度递归并耗尽了整个内存。我的虚拟机变得无响应,我必须重新启动它才能让它恢复工作。
因此,我想在一次迭代后摆脱递归子程序,而不是进行无限递归。
这是代码:
#!/usr/bin/perl -w
use strict;
my $IP = to_ip("abcdefgh");
print $IP."\n";
my $count = 0;
sub to_ip
{
if ( $count lt 1 )
{
use Socket;
my $hostname = shift;
my $packed_ip = gethostbyname($hostname);
if ( defined $packed_ip )
{
sprintf inet_ntoa($packed_ip);
}
else
{
$hostname .= ".my.company.net";
to_ip($hostname);
}
$count++;
}
else
{
return;
}
}
Aobve 代码给了我以下警告,然后又卡住了。我必须重新启动虚拟机才能重新启动。
Useless use of sprintf in void context at get_deleted_list.pl line 98.
请忽略上述警告中的行号。它指的sprintf
是我的子
问题 2:如何在一次迭代后摆脱我的 sub。我不在乎我是否从 sub 获得结果,但我想在一次迭代后摆脱它。
谢谢。