Еще одним интересным результатом проверки производительности является то, что при попытке заменить в сценарии gab3.pl встроенные вызовы функций syswrite () и sysread является то, что на их объектно-ориентированных оболочках произошло снижение производительности на 20 процентов, что определяется издержками вызова метода Perl. Вероятно, это снижение не имеет существенного значения в большинстве сетевых приложений, быстродействие которых в основном зависит от скорости работы сети, но его следует учитывать в тех не прерываемых внутренних циклах, для которых требования к производительности являются исключительно важными.
Кроме того, при выполнении проверки сценария gab3.pl с сервером bliza_server.pl была обнаружена явная ошибка в методе command_interface () модуля Eliza. При чтении строки ввода с устройства STDIN, этот метод никогда не проверяет признак конца файла. В результате после завершения соединения со стороны клиента метод command_interface () входит в очень неприятный бесконечный цикл, который бесполезно тратит процессорное время.
Эту проблему проще всего решить, откорректировав метод testquit () модуля Ehatbot::Eliza _testquit (), который проверяет наличие во входной строке слов наподобие “quit” и “bye”. Путем проверки того, не является ли значение этой строки неопределенным, в методе _testquit () можно обнаружить конец файла. Вставьте следующее определение где-то в конце сценария сервера Eliza.
sub Chatbot::Eliza::_testquit { my ($self,$string) = @_;
return 1 unless defined $string; # Проверка признака EOF
foreach (@{$self->{quit}}){ return 1 if $string /b$_b/i |; }
Теперь сервер будет обнаруживать условие конца файла и правильно реагировать на него.