#!/usr/bin/perl -w $SIG{ALRM} = sub { die "timeout"; }; while (1) { eval { command(); }; if ($@) { if ($@ =~ /timeout/) { redo; } else { alarm(0); die; } } else { last; } } print "Done\n"; sub command { my $date = `date`; chomp($date); alarm(5); print "\n"; print "prompt $date > "; <>; alarm(0); }