Если вызов метода произошел, когда буфер outbuffer пуст и нет данных, предназначенных для постановки в очередь, просто возвращается значение 0E0. Такая ситуация возникает очень редко, например, при запросе информационной страницы о принтерах epson r285 , при котором произошел сбой. И наконец, перед выходом вызывается dнутренний метод adjust_state(). Он синхронизирует объект IO::SessionData с объектом IO::SessionSet, который им управляет. Работа метода завершается путем возврата кода результата.
Строки 80-90. Метод read (). Объём кода метода read () невелик по сравнению с предыдущим методом. Этот метод имеет такой же синтаксис, как и встроенные функции read() и sysread() языка Perl. В действительности он представляет собой простую оболочку для функции sysread (), которая перехватывает код результата и возвращает значение 0Е0 при возникновении ошибки ewouldblock.
Единственная сложность состоит в том, что применяется ссылка непосредственно на элементы списка параметров подпрограммы (в форме $_[0], $_[!] и т.д.), а не их копирование в локальные переменные.
Это позволяет передавать соответствующие значения непосредственно функции sysread(), чтобы она могла модифицировать буфер данных вызывающей процедуры на месте.
Строки 91-102. Метод close () отвечает за закрытие дескриптора файла и выполнение очистки. Здесь применяется небольшая хитрость, поскольку в выходном буфере записи могут оставаться данные, ждущие обработки; в этом случае нельзя немедленно закрыть дескриптор файла, можно только его отметить, чтобы закрыть окончательно после записи всех ожидающих данных.
Вызывается метод pending () для определения того, есть ли еще данные в буфере записи.