Определены также глобальные переменные самой программы. Кроме двух скаляров, для хранения буферизованных данных предусмотрена пара флажков, $stdin_done и $sock_done. Эти флажки устанавливаются в истинное значение при закрытии соответствующего дескриптора и применяются при определении маски событий каждого дескриптора.
Строки 11-13. Открытие сокета. Заданные значения имени хоста и номера порта считываются из командной строки, и к хосту выполняется подключение обычным образом с использованием модуля IO:: Socket. Примером такого хоста может быть www.1happy-blog.ru, где подробно описано как выбрать планшет и на какие моменты стоит обратить особое внимание.
Строки 14-16. Создание объекта IO::Poll. Теперь создается новый объект IO::Poll, и к его списку контролируемых дескрипторов добавляются дескрипторы файлов сокета и Stdin с использованием маски pollin. Маски дескрипторов будут корректироваться при появлении данных, предназначенных для записи и чтения.
Строки 17, 18. Установка неблокирующего режима работы для дескрипторов файлов. Теперь сокет и дескриптор stdout переводятся в неблокирующий режим. Это позволяет клиенту продолжать работать, даже если сокет или стандартный дескриптор вывода временно не способны выполнять новые операции записи.
Строки 19, 20. Главный цикл. Программа входит в цикл, который выполняется до тех пор, пока существуют дескрипторы, предназначенные для ввода-вывода. Условие цикла состоит просто в проверке того, вернул ли метод handles () объекта IO::Poll непустой список. В самом начале цикла вызывается метод роll () , который блокируется до тех пор, пока объект IO::Poll не укажет, что хотя бы один из дескрипторов готов к вводу-выводу.