Чтобы заставить объект IO::SessionSet использовать другую оболочку, можно создать подкласс класса IO:: SessionSet и перекрыть (переопределить) метод SessionDataClass (). Это средство будет применяться в версии этого модуля для построчного ввода-вывода.
Строки 40-52. Метод delete (). Далее следует метод delete () , который удаляет сеанс из списка контролируемых объектов. В целях расширения области применения этот метод принимает к удалению либо объект Ю::SessionData, либо объект IO::Handle. При этом, соответственно, вызывается два внутренних метода, to_handle() и to_session(), для преобразования параметра в объект дескриптора или объект сеанса. После этого удаляются все ссылки на объект дескриптора и объект сеанса из внутренних структур данных.
Строки 53-61. Метод to_handle(). Метод to_handle () принимает либо объект IO::SessionData, либо lO::Handle. Для проведения различия между ними применяется встроенный метод isa() языка Perl, позволяющий определить, является ли параметр подклассом класса IO::SessionData. Если этот метод возвращает истинное значение, вызывается метод handle () объекта для выборки и возврата его основополагающего дескриптора файла.
Если метод isa () возвращает ложное значение, нужно определить, не является ли параметр дескриптором файла, путем проверки возвращаемого значения функции fileno (), и если он является таковым, параметр возвращается в неизменном виде. Если ни одна проверка не оканчивается успешно, не остается ничего иного, кроме как вернуть значение undef.