Ранее был описан встроенный интерфейс Perl к сокетам Berkeley, который полностью повторяет соответствующие вызовы библиотеки С. Однако некоторыми из этих встроенных функций неудобно пользоваться, поскольку для их вызова приходится преобразовывать адреса и другие структуры данных в двоичные форматы, необходимые для работы с библиотекой сокетов С.
С появлением объектно-ориентированных расширений Perl5 стало возможным создание более удобного интерфейса, который основан на использовании модуля IO::Handle. Модуль IO::Socket и другие связанные с ним модули позволяют упростить код и сделать его более легким для чтения. Эти модули дают возможность устранить громоздкие вызовы, относящиеся к средствам языка С, и сосредоточиться на сути приложения.
Применение модуля IO::Socket. Теперь мы можем исправить небольшой недостаток первых версий примеров служб времени (который не был тогда устранен в целях упрощения кода). Как и во многих других серверах Internet, в сервере службы времени для обозначения конца строки предусмотрено применение символов CRLF, а не одного символа LF. Перед получением данных от службы времени переменная с обозначением конца строки устанавливается равной CRLF, поскольку в ином случае считанная строка будет содержать в конце лишний символ CR. Рассмотрим этапы для нового сценария:
Инициализация модуля. Выполняется загрузка модуля IO::Socket и импорт константы CRLF, а также констант, предусмотренных по умолчанию. Эти константы удобно снова экспортировать из модуля Socket. Имя удаленного хоста берется из командной строки. Далее - установка переменной с обозначением конца строки. Для чтения строк из серверной службы времени глобальная переменная $/ с обозначением конца строки устанавливается равной CRLF. Обратите внимание, что эта глобальная опция распространяется на все дескрипторы файлов, а не только на сокет.