use strict; use warnings; my @hostlist = (1 .. 10); HOST: foreach my $host (@hostlist) { my $timeout = 2; eval { local $SIG{ALRM} = sub { die "alarm\n" }; alarm $timeout; openRemoteSql(); alarm 0; }; if ($@) { print "Timed out\n"; next HOST; } else { print "Didn't time out\n"; } } sub openRemoteSql { if (int rand 2) { print "Blocking\n"; ; } }