当 inet_ntoa 返回 IP 地址时手动分配一个值

当 inet_ntoa 返回 IP 地址时手动分配一个值

代码:

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会返回任何内容,因此该测试无效。 (并且==仅用于比较,而不是赋值。)

相关内容