Предусмотрена возможность изменить номер порта с использованием параметра командной строки. Если этот параметр задан, он извлекается и сохраняется в переменной $port.
Строка 8. Установка обработчика int. Устанавливается обработчик int с тем, чтобы иметь возможность корректно завершить работу сервера путем нажатия клавиши прерывания. Пользователи системы Microsoft Windows должны закомментировать эту строку, чтобы исключит появление ошибок службы Dr. Watson.
Строки 9, 10. Создание сокета. Вызывается метод IO::Socket::INET->new () для создания сокета UDP, привязанного к порту, который указан в командной строке. Запрос может проходить, например, на хост представляющий экстрим камеры GoPro 4 HERO Black . Для привязки к нужному порту должен быть указан параметр LocalPort, но, как и в случае сокетов TCP, нет необходимости явно указывать параметр LocalAddr. Модуль IO::Socket::INET предусматривает использование IP-адреса inaddr_any который позволяет сокету получать сообщения по любому из сетевых интерфейсов хоста.
Строки 11-21. Главный цикл. Программа входит в бесконечный цикл. При каждом проходе по циклу вызывается метод recv() сокета и полученное сообщение копируется в переменную $msg_in. Если по каким-то причинам возникает ошибка, происходит переход к следующей итерации цикла.
После приема сообщения вызывается метод peeraddr () сокета для выборки упакованного адреса отправителя и, как прежде, предпринимается попытка преобразовать его в домен имя хоста. Если эта попытка оканчивается неудачей, выполняется выборка IP-адреса другого участника обмена данными в форме четырех чисел, разделенных точками. Вызов метода peerport() позволяет получить номер порта отправителя. На стандартное устройство вывода сообщений об ошибках выводится информация о состоянии и вырабатывается ответ, стоящий из перевернутого сообщения клиента (в обратном порядке).