В мире современных технологий сфера автоматизации с оптимальным использованием ресурсов активно развивается и с каждым годом становится все более востребованной. Всякие разнообразные станки оказывают неоценимую помощь в различных сегментах производства. Это и обработка металла, намотка, художественная ковка и многое другое.
В следующем фрагменте кода осуществляется экспорт различных подпрограмм, определенных в модуле IO::interface, в пространство имен IO::Socket и выполняется их преобразование в методы, которые могут использоваться с объектами IO::Socket. С помощью любой из функций, которые определены в глобальном массиве @functions, можно выполнять примерно такое присваивание:
*{"IO::Socket::if_addr") = &if_addr;
Приведенная здесь общая схема представляет собой малоизвестный способ создания в пространстве имен другого модуля псевдонима, соответствующего функции, которая определена в текущем модуле. Эта схема описана, хотя и очень кратко, в справочных руководствах perl_sub и perl_ref и представляет собой основную операцию, выполняемую модулем Exporter. Такое действие необходимо выполнить для списка функций, поэтому применяется небольшой цикл, который создает псевдонимы пространства имен для каждой функции по очереди.
Оператор no strict 'refs' отключает на время средства проверки, которые запрещают подобные манипуляции пространством имен.
Строки 39-45. Получение адреса интерфейса. Наконец, мы готовы к реальной работе. Функция if_addr () принимает сокет и имя интерфейса, а также возвращает IP-адрес интерфейса в виде строки из четырех чисел, разделенных точками. Выполнение этого кода начинается с создания упакованной структуры ifreq, содержащей имя затребованного интерфейса. Формат ifreq_name предусматривает упаковку имени в первые ifnamsiz байт структуры и заполнение нулями ее остальной части.