threadn { eval { sighandler = {}; alarm 15; ## alarm#1 start threadn+1; start threadn+2; threadn+2->join threadn+1->join } alarm 0; } threadn+1{ eval{ sighandler = {}; alarm 15; ## alarm#2 @input = qx[ ping ]; } alarm 0; } threadn+2 { @input = qx[ tcpdump; return @input; } #### sub ping { my $dns_name = shift; open my $cmd, "ping -c 15 -i 1 $dns_name" or die; m/PING (.*).et.byu.edu/ and return $1 while <$cmd>; return; }