Atribua manualmente um valor quando inet_ntoa retorna um endereço ip

0

Código:

foreach $hostname (@hostnameUniqueSorted){
    $ipaddr = inet_ntoa((gethostbyname($hostname))[4]);
    if(chomp($ipaddr) =~ '^$') $ipaddr == "ip not avail";   <-- doesn't work
}

Se o host não retornar um endereço IP, ele quebraria e mostraria:

Usage: Socket::inet_ntoa(ip_address_sv) at ./abc line 24.

Como posso pegá-lo e atribuir talvez 'ip not avail' para o $ ipaddr?

Eu adicionei a última linha, mas não funciona.

    
por user11496 04.01.2012 / 10:30

1 resposta

1

Você deve verificar o valor de retorno de gethostbyname - ele retorna uma lista vazia se o host não for encontrado, e inet_ntoa não pode lidar com isso.

Tente algo como o seguinte:

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";
}

Observe que sua sintaxe está incorreta, {} são necessárias após a condição if. E eu não acredito que chomp devolve nada, então esse teste é inválido. (E == é apenas para comparação, não atribuição).

    
por 04.01.2012 / 10:58

Tags