$SIG{ALRM} = sub { die "timeout\n"; } eval {  alarm(180);  # ....  alarm(0); # reset }; if ($@) {  if ($@ =~ /timeout/) {    print "Timed out\n";  }  else {    die "Error: $@\n";  } }