Создание сокета. Создается новый объект IO::Socket путем вызова метода IO::Socket::inet с указанием адреса назначения в форме $host:service. Ниже будут рассматриваться и другие способы указания адреса назначения. Далее идет читывание значения времени и вывод его на устройство вывода. С сервера считывается одна строка путем вызова метода getline(), и символы CRLF удаляются с конца строки с помощью функции chomp(). Строка выводится на устройство вывода STDOUT.
Теперь рассмотрим объектно-ориентированную версию клиента службы эхо поэтапно.
Инициализация сценария. Выполняется загрузка модуля IO::Socket, инициализация констант и глобальных переменных, а также обработка параметров командной строки. Далее следует создание сокета. Вызывается метод IO::Socket::INET->new() с использованием параметра $host:$port. В случае успешного выполнения метод new() возвращает объект сокета, подключенный к удаленному хосту. Далее организуется главный цикл. Теперь программа входит в главный цикл. При каждом проходе по циклу вызывается функция getline() с дескриптором файла STDIN для получения строки ввода от пользователя. Эта строка текста отправляется на удаленный хост путем вывода в сокет с помощью функции print(), а ответ сервера считывается с помощью оператора <>. Ответ выводится на стандартное устройство вывода, и обновляются статистические данные. Главный цикл завершается при закрытии устройства STDIN пользователем. Сокет закрывается, и накопленные статистические данные выводятся на устройство STDERR.
Обратите внимание, что для работы с устройством STDIN используется объектно-ориентированный метод getline(). Такая возможность возникла в результате применения модуля IO::Socket, в котором предусмотрена загрузка модуля IO::Handle. Дополнительным эффектом применения IO::Handle является добавление объектно-ориентированных методов ввода-вывода всем дескрипторам файлов, используемым в программе, в том числе и стандартным.