sub getinput { my $default = shift; my $value; eval { local $SIG{ALRM} = sub { die "alarm clock restart" }; alarm 10; # your code here, read $value = ... alarm 0; }; if ($@ and $@ !~ /alarm clock restart/) { return $default } return $value; }