use constant TIMEOUT => 1; eval { local $SIG{ALRM} = sub { die "timeout during sysread\n"; }; alarm(TIMEOUT); $read_flag = sysread($filehandle, $c, 1); alarm(0); };