Приведем описание дополнительного исходного кода для модуля Net::NetmaskLite. Этот модуль содержит утилиты для работы с различными масками сети, в том числе не оканчивающимися на границе байта. Он позволяет легко определить назначения широковещательного и сетевого адресов, соответствующие любому состоянию маски сети и IP-адреса. Изучите методы hostpart (), netpart (), network () и broadcast (), чтобы понять, как связаны между собой соответствующие части IP-адреса и маска сети.
Модуль Net::Netmasк Дэвида Шарноффа (David Sharnoff), который может быть получен из архива CPAN, предоставляет более развитые функциональные средства и рекомендуется для использования на производстве или совместной работы с сервером, на котором размещен онлайн сервис, к примеру, веб студия махаон . Проведем анализ программы.
Строки 1-5. Загрузка требуемых модулей. Включается строгий контроль соответствия типов и загружаются модули Carp и IO::Socket. Определяется также глобальная переменная сокета %servers, которая будет применяться для установки обратной связи от объекте IO::Socket к объекту ChatObjects::Comm, который служит для него оболочкой.
Строки 6-10. Конструктор объекта. Метод new() создает и инициализирует новый объем
ChatObjects::comm. Для создания соответствующего объекта сокета и записи его в хеш включенный в пространство имен модуля с помощью функции bias(), вызывается еще один метод, create_socket (). Перед возвратом нового объекта он запоминается в глобальное переменной %servers.
Строка 11. Метод create_socket(). Этот метод возвращает объект IO::Socket::INET, инициализированный соответствующим образом. Вызывается метод IO::Socket::INET->new с параметром Proto, равным “udp”, и всеми прочими параметрами, переданными данному методу.
Строка 12. Поиск объекта ChatObjects::Comm по его сокету. В методе класса
sock2server () для поиска объекта ChatObjects::Comm по соответствующему ему объекту применяется переменная %servers.
Строка 13. Поиск сокета по объекту ChatObjects::Comm. Метод socket () выполняется противоположное действие, возвращая объект IO::Socket, соответствующий объекту ChatObjects::Comm.