$SIG{ALRM} = \&timed_out; $tryurl = 1; while ($tryurl) { eval { print "Getting url... $url\n"; alarm(10); $response = get $url; alarm(0); }; if ($@ =~ /BLAH/) { print "Timed out. Trying again...\n"; $tryurl = 1; } else { $tryurl = 0; } } print "Got url!\n"; sub timed_out { die "BLAH" }