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

관련 정보