http://www.perlmonks.org?node_id=768752

irah has asked for the wisdom of the Perl Monks concerning the following question:

Dear Monks,

The following code is used to check the status of the network. The logic is, I am executing ping command with two different IP address. If first one failure only, it will goto second one.

#!/usr/bin/perl use strict; use warnings; # register signal. $SIG{'INT'} = 'Handler'; # declaring variable. my ($ip1, $ip2, $to, $exit_value1, $exit_value2, $flag); # this flag is used to avoid the repeat # execution when execute the second ping # with second IP address. $flag=0; # initializing IP address. $ip1 = "192.168.0.0"; # first IP address $ip2 = "google.com"; # second IP address. # execute the ping with first IP address. do { eval { $exit_value1 = `ping $ip1`; } }; exit; # if it is working fine, exit the program. # execute the ping with second IP address. Exec: print "$ip2\n"; $flag=1; # reset the flag to avoid repeat # execute second ping with different IP address. do { eval { $exit_value2 = `ping $ip2`; } }; # it is a signal handle for SIGINT signal. sub Handler { # alert message to user. print "Caught SIGINT: $?\n"; # if the first ping command is failure, goto second, if (($? != 0) and ($flag == 0)) { goto Exec; } exit(0); }

The if condition in handler is true when the first ping failure. But the goto statement inside if condition does not working. Please tell me where I did the mistake?

Note: I used eval instead of setjmp. I don't get any error or warning message for that.