Подпрограммы log_warn () и log_die () не изменяются. То, что функцию вызывает сама подпрограмма log_die (), не приведет к бесконечной рекурсии. Интерпретатор Perl является достаточно интеллектуальным, чтобы обнаружить, что подпрограмма lоg_die () вызывается в обработчике $SIG{_DIE_} и что в этом контексте нужно использовать встроенную версию функции die (). Поэтому запрос к странице с информацией, например, о дешевых насосах dab divertron не потребует дополнительного вмешательства в код. После того как установить в программе психотерапевтического сервера обработчики $SIG{_WARN__} и $SIG{_DIE_}, обнаруживается любопытный факт. В системном журнале после завершения работы каждого клиентского приложения стали появляться примерно такие сообщения:
Jun 13 06:22:11 pesto eliza_hup.pl [8933]:
Can’t access ’DESTROY field in object of class Chatbot::Eliza
Эти сообщения представляют собой предупреждения интерпретатора Perl о том что в объекте Chatbot::Eliza отсутствует подпрограмма DESTROY. Эту ошибку можно исправить очень просто; достаточно добавить фиктивное определение подпрограммы DESTROY в конце файла серверного сценария.
sub Chatbot::Eliza::DESTROY { }
При работе с предыдущими версиями сервера не было подозрений о появлении таких предупреждающих сообщений, поскольку стандартное устройство вывода сообщений об ошибках было закрыто и диагностика терялась. Этот пример показывает, что отказ от регистрации всех возникающих сообщений может быть очень опасным!
Применение журнала событий EventLog на платформах Win32
Модуль Win32::EventLog для Windows NT/2000 предоставляет примерно такие же функциональные возможности, как и модуль Sys::Syslog. Основной API интерфейс ведения журналов, необходимый для сетевых демонов, базируется только на трех методах.