use IO::Select ; my $timeout = 5 ; my $stdin = \*STDIN ; my $ios = IO::Select->new( $stdin ) ; for(;;) { my $sel = $ios->can_read($timeout) ; my $buffer ; print "Reading ($timeout\s)...\n" ; 1 while( read( \*STDIN , $buffer, 1 , length($buffer) ) ) ; print "Read:<$buffer>" ; } #### 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 $@ } }