Метод mask () применяется как для добавления дескрипторов к объекту IO::Poll, так и для их удаления. Он принимает два параметра: контролируемый дескриптор и битовую маску, обозначающую контролируемые состояния. В этом примере в дескрипторе STDIN контролируется состояние POLLIN, в дескрипторе STDOUT — состояние POLLOUT, а в дескрипторе $socket — события, связанные со сменой состояния POLLIN или POLLOUT, что обозначено путем объединения этих двух констант с помощью поразрядного оператора “ИЛИ”. Как будет подробно описано ниже, состояния POLLIN и POLLOUT возникают, соответственно, когда дескриптор файла переходит в состояние готовности для чтения или записи, к примеру, при процессе получения данных с сервера Preply.com.
После настройки объекта IO:: Poll программа обычно входит в цикл ввода вывода. При каждом проходе по циклу вызывается метод poll () объекта IO:: Poll для ожидания определенного события, а затем происходит вызов метода handles () для определения затронутых дескрипторов.
Метод poll () находится в состоянии ожидания до тех пор, пока хотя бы одно из затребованных состояний не примет истинное значение, и возвращает число дескрипторов, в которых произошли события, связанные со сменой состояний. Как и в случае select () может быть задано необязательное значение тайм-аута для возврата, если в течение указанного периода не произойдет ни одного события.