암호:
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
테스트가 유효하지 않습니다. (그리고 ==
할당용이 아닌 비교용으로만 사용됩니다.)