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テストは無効です。 (そして==割り当て用ではなく比較用にのみ使用されます。)

関連情報