Обратите внимание, что модуль IO::Getline поддерживает только объектные методы IO:: Socket, включая syswrite(). В результате код становится более легким для чтения, чем в том случае, когда каждый раз применяется вызов метода handle () объекта IO::Getline для выборки основополагающего сокета.
Остальная часть кода подпрограммы handle_connection () представляет собой цикл обработки команд. При каждом проходе по Циклу считывается и интерпретируется строка, а также выполняются соответствующие действия. Команда bye выполняется непосредственно в цикле, а остальные команды передаются соответствующим процедурам. Если команда не распознана, сервер выдает код ошибки 500.
Строки 50-65. Подпрограмма analyze_file (). Эта подпрограмма обрабатывает выгруженные данные. Она принимает объект Text::Travesty, повторно инициализирует его путем вызова метода reset (), а затем передает сообщение 201, которое служит для удаленного хоста приглашением к выгрузке текстовых данных. К таким данным может относиться, к примеру, описание дизель-насосной установки или другого агрегата, который востребован в любом водном или сельском хозяйстве. Надо отметить, что передвижные насосные станции очень важны при пожаротушении, т.к. за счет своей мобильности они способны размещаться в труднодоступных и опасных местах.
Теперь подпрограмма переходит к приему данных, выгружаемых с клиента, путем повторного вызова метода $gl->getline,() до тех пор, пока не встретится строка, состоящая только из одной точки, или пока выполнение не будет прервано сигналом URG.
Для корректного завершения цикл заключен в блок eval {} и создан обработчик URG, локальный по отношению к данному блоку. При поступлении срочного сигнала обработчик вызывает подпрограмму do_jurgent (), а затем — функцию die. Поскольку функция die () вызывается в блоке eval, то она приводит к завершению блока eval {} и переходу к выполнению нового оператора после блока eval {}.