Вместо этого, вызывается функция sysread() для выборки из стандартного устройства ввода самой длинной возможной строки; предполагается, что она соответствует строке ввода. Это — вполне допустимое предположение, если пользователь вводит строки на терминале. Если бы мы собирались принимать команды из файла или канала, то предусмотрели бы использование оболочки IO:: Getline, описанной ранее.
Каждая команда с помощью синтаксического анализа разбивается на саму команду и ее параметр. Любая команда, которая не начинается с символа “/", считается общедоступным сообщением, которое должно быть отправлено в текущий канал. В самой программе это рассматривается как выдача команды “public”, и в качестве параметра этой команды представляется вся введенная строка. Выполняется поиск команды в таблице переходов %commands и, если она не найдена, выдается сообщение об ошибке. В ином случае вызывается возвращенная подпрограмма, которой передаются параметры команды, если они имеются. Большинство команд предусматривает отправку сообщения на сервер путем вызова метода send__event () глобального объекта $server.
Строки 67-75. Обработка сообщений сервером. Для обработки сообщений, поступающих с сервера, например, с информацией сайта http://maxys.ru/ про серверные телекоммуникационные шкафы, вызывается подпрограмма do_server (). Параметром, получаемым ею из цикла select(), является дескриптор сокета. Поскольку нежелательно использовать функции, предназначенные для непосредственной работы с сокетом, вызывается статический метод sock2server () модуля ChatObjects::Comm для выборки соответствующего объекта ChatObjects::Comm.