2013-11-18 18 views
0

Следующий сценарий выйдет, когда одноранговый порт не прослушивает. Я не хочу, чтобы он существовал, а нужно продолжать. Я знаю, что «умереть» ниже приведет к этому, но есть лучший способ захватить ошибку без выхода.Как поймать ошибку, не выходя из скрипта?

my $socket = new IO::Socket::INET (
    PeerHost => $properties{peer_host}, 
    PeerPort => $properties{peer_port}, 
    Proto => 'tcp', 
); 
die "cannot connect to the server $!\n" unless $socket; 
while(1){ 

#send something to the port 
} 

Выход:

cannot connect to the server Connection refused 
+2

FYI, IO :: Socket :: INET хранит свои сбои конструкции в '$ @', _not_ в '$!'. Удивительно и [крайне не документировано с 5.18.0] (http://perldoc.perl.org/IO/Socket/INET.html), но верно. (Я думаю, что-то связанное с ETIMEDOUT, которое не существует во всех поддерживаемых системах). – pilcrow

ответ

0

вы можете использовать warn

my $socket = new IO::Socket::INET (
    PeerHost => $properties{peer_host}, 
    PeerPort => $properties{peer_port}, 
    Proto => 'tcp', 
); 
warn "cannot connect to the server [email protected]\n" unless $socket; 
while(1){ 

#send something to the port 
} 
Смежные вопросы