my $timeout = 5; eval { local $SIG{ALRM} = sub { die "alarm\n" }; # NB: \n required alarm $timeout; my $ret = qx/ping db01/; alarm 0; }; if ($@) { # timed out print "timeout handling ($! - $@) ...\n"; die unless $@ eq "alarm\n"; # propagate unexpected errors } else { # didn't print "no timeout timeout handling...\n"; }