Если метод new () был вызван с объектом приемного сокета IO::Socket, то этот сокет сохраняется в четвертой переменной состояния и вызывается метод add () модуля IO::Select для добавления этого приемного сокета к списку дескрипторов, контролируемых на наличие запросов, предназначенных для чтения. Это позволяет включить в программу код автоматического вызова метода accept ().
Строки 28-30. Метод sessions (). Метод sessions () возвращает список объектов IO::SessionData, которые были зарегистрированы с помощью этого модуля. Поскольку этот класс должен выполнять прямое и обратное преобразование объектов IO::SessionData и основополагающих дескрипторов, для которых эти объекты служат оболочкой, переменная состояния сеансов sessions фактически представляет собой хеш, ключами которого являются объекты IO::Handle (как правило, сокеты) а значениями—соответствующие оболочки IO::SessionData. Метод sessions () возвращает значения этого хеша.
Строки 31-39. Метод add(). Метод add () вызывается для добавления дескриптора к контролируемому набору. Он принимает дескриптор файла и необязательный флажок, который указывает, что дескриптор предназначен только для записи.
Вызывается метод IO::SessionData->new() для создания нового объекта сеанса, после чего дескриптор и его вновь созданный объект сеанса добавляются к списку дескрипторов, контролируемых набором объектов сеанса IO::Session-Set. В результате выполнения метода создается объект сеанса.
Этот метод имеет одну интересную особенность. Поскольку необходимо иметь возможность создавать подкласс класса IO::SessionData в будущем, в методе add () имя класса сеанса жестко Не закодировано. Вместо этого, объект сеанса создается косвенно, через внутренний метод SessionDataClass(). Этот метод возвращает строку, которая будет использоваться как класс объекта сеанса, в данном случае “IO::SessionData”.