my $timeout = 5 ; for(;;) { eval { local $SIG{ALRM} = sub { die "DIE_ALARM\n" } ; alarm $timeout ; my $buffer; print "Reading ($timeout\s)...\n" ; 1 while( read( \*STDIN , $buffer, 1 , length($buffer) ) ) ; print "Read:<$buffer>" ; alarm 0 ; }; if ($@ !~ /DIE_ALARM/s) { die $@ } }