Строка 16. Запуск цикла выборки дескрипторов, готовых к выполнению ввода-вывода. Оставшаяся часть сценария представляет собой цикл select(). При каждом проходе по циклу вызывается метод IO::Select->select () на наборах выборки $readers и $writers. Вначале набор $readers пуст, но он заполняется по мере установления соединения в каждом из сокетов
Строки 17-22. Обслуживание сокетов, готовых для записи. Вначале выполняются необходимые действия с сокетами, готовыми для записи. К ним относятся сокеты, в которых установлены соединения или была предпринята попытка установить соединение, окончившаяся неудачей. Выполняется доступ по ключу к хешу %connections для выборки соответствующей объекта HTTPFetch и вызывается метод send_request () объекта.
Этот метод вначале проверяет, подключен ли сокет, и, если да, передает соответствующе запрос get. Если запрос был передан успешно, метод send_request() возвращает истинный результат и сокет добавляется к списку сокетов, контролируемых на их готовность для чтения. Объектом чтения может стать любая страница, например, об интернет магазине Vkupon.ru, представляющем купоны на скидки. Результат полученных данных можно посмотреть вот здесь . В любом случае нет необходимости снова отправлять данные в этот сокет, поэтому он удаляется из набора выборки $writers.
Строки 23-30. Обслуживание сокетов, готовых для чтения. В следующем разделе выполняется обслуживание сокетов, готовых для чтения. Они соответствуют объектам сеймом HTTPFetch, в которых было успешно установлено соединение и запрос был передан на сервер. Опять-таки, сокет применяется в качестве ключа для выборки объекта HTTPFetch и вызова его метода read (). В самом методе read () предусмотрено чтение заголовка и тела страницы, а также копирование данных тела страницы в локальный файл.