use constant TIMEOUT => 1;
eval {
local $SIG{ALRM} = sub { die "timeout during sysread\n"; };
alarm(TIMEOUT);
$read_flag = sysread($filehandle, $c, 1);
alarm(0);
};
URL:
Обсуждается: https://www.opennet.ru/tips/info/308.shtml
Применение конечно намного шире нежели чем просто "die" внутри eval. Каждый новый alarm отменяет действие предыдущего и переустанавливает счетчик "секунд". Значение 0 отменяет alarm вообще.
Не всегда alarm корректно отрабатывает под mod_perl. В каждом случае надо пробовать отдельно.
Спасибо алекс