Ах, я понимаю, что вы имеете в виду. Системный («очистить») вызов очищает $! переменная, прежде чем вы сможете распечатать ошибку из gethostbyname.
my $i_addr = scalar(gethostbyname($hostname || 'localhost'));
if ( ! defined $i_addr ) {
my $err = $!;
system("clear");
print("Can't resolve $hostname: $err, try again");
system("/root/Desktop/showdns.pl");
exit();
}
Хотя, насколько я могу судить, конкретная ошибка, которую возвращает gethostbyname, не очень значима.
Возможно, вы захотите включить цикл в ваш скрипт, а не запускать его заново с помощью system (). Вы, конечно, не хотите переходить к inet_ntoa, если произошла ошибка. Обратите внимание, что inet_ntoa не имеет ничего общего с поиском DNS; это сделано gethostbyname. inet_ntoa просто меняет 4-байтовую строку на обычную 123.123.123.123
печатная форма ipaddress. sprintf("%vd", $i_addr)
делает то же самое.