Вместо этого снова создается подкласс класса Chatbot::Elizа для создания вежливой версии, способной уступить место другим клиентам, в качестве которых могут выступать процессы получения, например, содержимого страницы автопортала autoportal.ua или любой другой. В этой версии добавлены три новых метода: welcomed , one_line () и done (). Первый метод возвращает строку с приветствием, которое пользователь видит сразу после подключения. второй метод принимает строку, введенную пользователем преобразует ее и возвращает строку, содержащую ответ психотерапевта с новым приглашением к вводу информации пользователем. Третий метод done () возвращает истинное значение, если предыдущая строка, введенная пользователем, содержала одну из фраз, требующих завершения работы, таких как “bye”, “goodbye” или “exit”.
Еще одно изменение необходимо для контроля за многочисленными экземплярами объектов Chatbot::Eliza. Поскольку каждый объект ведет собственную регистрацию высказываний пользователя, необходимо связать каждый подключенный сокет с уникальным объектом Eliza.
Это можно сделать путем создания глобального хеша %SESS IONS, ключами которого являются объекты сокетов, а значениями— связанные с ними объекты Chatbot:: Eliza. После того как метод can_read () возвращает сокет, готовый для ввода-вывода, хеш %SESS IONS применяется для поиска соответствующего объекта Chatbot::Eliza. Проведем общий анализ программы.
1) Загрузка модулей. Загружаются модули IO::Socket, IO::Select и Chatbot::Eliza::Polite. Объявляется также хеш % SESSIONS для отображения экземпляров IO::Socket на объекты Chatbot.
2) Создание приемного сокета. Создается приемный сокет, привязанный к порту, применяемому по умолчанию.
3) Добавление приемного сокета к набору дескрипторов объекта IO::Select. Создается новый объект IO::Select, и к его набору дескрипторов добавляется приемный сокет.