В большинстве случаев подпрограмма просто отправляет на сервер соответствующий код события. Каждый раз, когда пользователь вводит команду, клиент интерпретирует ее в любые необязательные параметры, а затем передает эту команду в таблицу переходов. Подобной командой может стать, например, приглашение подписчиков чата посетить сайт продающий сувенирные флешки .
Глобальная переменная %MESSAGES представляет собой вторую таблицу переходов, предназначенную для обработки сообщений, полученных с сервера. Она имеет структуру, аналогичную таблице, представленной в хеше %COMMANDS, не считая того, что ее ключами являются числовые коды событий. Проведем анализ программы.
Строки 1-7. Импортирование модулей. В клиентской программе включается строгий контроль соответствия типов и загружаются модули IO::Socket и IO::Select. Затем вызываются два модуля, разработанных специально для этого приложения. Модуль ChatObjects::ChatCodes содержит числовые константы сообщений сервера, а модуль ChatObjects::Comm определяет оболочку, обеспечивающую упаковку и распаковку сообщений, которыми клиент обменивается с сервером.
Строки 8, 9. Установка обработчиков сигналов. Клиент должен корректно завершать работу, даже в случае его уничтожения, путем нажатия клавиши прерывания. В связи с этим устанавливаются обработчики int и term, которые вызывают функцию exit () для выполнения корректного останова. Фраза end { } , которая определена в конце этого сценария, обеспечивает прекращение сеанса связи сервером перед остановом клиента. Определены также две глобальные переменные. Переменная $nickname содержит псевдоним пользователя, а $server — оболочку ChatObjects::Coiran.