Код метода write_limit() может показаться не совсем понятным, но такова общая схема Perl для получения или установки переменной состояния в объекте Perl. Если метод вызывается без параметров, он возвращает значение переменной состояния write_limit. В ином случае он использует переданный параметр для обновления значения переменной состояния write_limit.
Строки 47-51. Метод set_choke () позволяет получить или установить подпрограмму обратного вызова, которая вызывается при превышении предельного размера выходного буфера. Структура этого метода аналогична методу write_limit ().
В качестве параметра ожидается получение ссылки на код, и в более тщательно подготовленной реализации этого метода можно было предусмотреть проверку того, что это действительно так.
Строки 52-60. Метод write (), постановка данных в очередь. Теперь мы подошли к более интересной части модуля. Метод write () отвечает за отправку данных через дескриптор. Если часть или все данные не могут быть отправлены немедленно, то они ставятся в очередь в буфере outbuffer для последующей отправки.
Метод write () может быть вызван с одним параметром, который содержит передаваемые данные, как в форме $session->write($data), или без параметров, как в форме $session->write(). В последнем случае метод пытается отправить все данные, которые были поставлены в очередь после предыдущих попыток отправки.
Выполнение метода начинается с выборки объекта из стека подпрограммы и дополнительной проверки того, что определены дескриптор файла и буфер outbuffer. Если эта проверка выполнена успешно и вызывающая процедура требует поставить в очередь для вывода дополнительные данные, эти данные добавляются к буферу outbuffer. Обратите внимание, что outbuffer может увеличиваться в размерах в соответствии с объемом данных, передаваемых методу write (). Лимит записи вступает в силу только после того, как объект IO::SessionData будет отмечен как готовый для чтения или записи дополнительных данных.