Как я могу настроить «Проверка ошибок» для поиска DNS, используя Perl?
Вопрос
У меня есть сценарий, который позволяет мне посмотреть на имя хоста после ввода IP-адреса, который будет пересылаться на DNS-сервер.
Однако, хотя все работает нормально, программа не может распечатать ошибки, которые я хочу, если DNS не может быть найден.
Коды:
#!/usr/bin/perl
use IO::Socket;
use warnings;
use strict;
use Term::ANSIColor;
use Socket;
use Sys::Hostname;
print "\nYou are now in Show DNS IP Address!\n\n";
print "*************\n";
print "|DNS Address|\n";
print "*************\n";
print "\nPlease enter a hostname that you wish to view\n\n";
print "\n\nEnter the hostname of Choice Here: ";
my $userchoice = <>;
chomp ($userchoice);
my $host = hostname();
my $hostname = $userchoice;
my $packed_ip = gethostbyname("$hostname");
my $ip_address = inet_ntoa($packed_ip) or system("clear"), system("/root/Desktop
/showdns.pl"), die("Can't resolve $hostname: $!\n ,try again");
my $coloredText = colored($name, 'bold underline blue');
print "\n\nThe hostname IP address is: $coloredText\n\n";
print "Press enter to go back to the main menu\n\n";
my $userinput2 = <>;
chomp ($userinput2);
system("clear");
system("/root/Desktop/simpleip.pl");
Может кто-нибудь, пожалуйста, дадите несколько советов по кодам?
Решение
Не злоупотребляйте |
Оператор для выполнения последовательности действий. Это не делает то, что вы хотите, хотя то, что вы хотите мне не ясно. Когда должны быть вызваны две системные звонки? На успех или неудачу?
Если он должен быть сделан, когда умрет () будет вызван, вы можете сделать:
my $i_addr = scalar(gethostbyname($hostname || 'localhost'))
or system("clear"), system("/root/Desktop/showdns.pl"), die("Can't resolve $hostname: $!\n ,try again");
my $name = inet_ntoa($i_addr);
my $i_addr = scalar(gethostbyname($hostname || 'localhost'));
if ( $i_addr ) {
system("clear");
system("/root/Desktop/showdns.pl");
die("Can't resolve $hostname: $!\n ,try again");
}
my $name = inet_ntoa($i_addr);
(Исправлены неправильные слова inet_ntoa; вам нужно проверить успех GethostbyName, прежде чем вы сможете это позвонить.)