代码:
foreach $hostname (@hostnameUniqueSorted){
$ipaddr = inet_ntoa((gethostbyname($hostname))[4]);
if(chomp($ipaddr) =~ '^$') $ipaddr == "ip not avail"; <-- doesn't work
}
如果主机不返回 IP 地址,它将中断并显示:
Usage: Socket::inet_ntoa(ip_address_sv) at ./abc line 24.
我如何捕获它并为 $ipaddr 分配“ip notvail”?
我添加了最后一行,但它不起作用。
答案1
您应该检查返回值gethostbyname
- 如果找不到主机,它会返回一个空列表,并且inet_ntoa
无法处理该问题。
尝试如下操作:
foreach my $hostname (@hostnameUniqueSorted) {
my @host = gethostbyname($hostname);
if (scalar(@host) == 0) {
$ipaddr = "not found";
} else {
$ipaddr = inet_ntoa($host[4]);
}
print $hostname, " => ", $ipaddr, "\n";
}
请注意,您的语法不正确,{}
在 if 条件之后是必需的。而且我不相信chomp
会返回任何内容,因此该测试无效。 (并且==
仅用于比较,而不是赋值。)