но вообще через io::handle можно получить дескриптор в неблокирующем режиме. проверять только нада будет %! на предмет сишной ошибки, когда был интерапт и можно еще вычитать или записать.
нужно читать в цикле, проверяя $! на возврат ошибки, что чтение прервано, и если прервано, то продолжить. сама ошибка есть в use Fcntl, в константах. я забыл как она называется, но в том модуле будет