Спасибо всем заблаговременно.Ловля ошибок с помощью mod_cgi и mod_perl
Я занимался некоторыми исследованиями в области обработки ошибок, и я не чувствую, что понимаю, что я должен делать.
Преамбула: мой код живет в Apache и выполнен в браузере, мои цели не включают выполнение командной строки.
Я хотел бы иметь поведение CGI :: Carp (fatalsToBrowser) с возможностью захвата вывода и иметь возможность бросать его на мою собственную страницу с шаблонами, отправлять по электронной почте и т. Д. ... Я заметил, что fatalsToBrowser не работает с mod_perl. Кто-нибудь знает, почему? Как Apache/mod_perl мешает?
Первый гол: Я хотел бы поставить что-то вместе, что работает, если код выполняется с mod_perl или mod_cgi.
Вторая цель: Я хотел бы иметь метод высокого уровня, который улавливает все ошибки, похожие на методы .NET Application_Error .NET (в global.asax) и методы set_exception_handler() и PHP set_exception_handler(). Это позволяет вам контролировать ситуацию при возникновении ошибки, без обертывания кода в беспорядочном
/брутто
операторов try-catch.
Вещи, которые я читал/обзор:
1.) OO Exception Handling in Perl, но не то, что я искал. Большинство вещей, которые я хочу поймать, - die() ing. В следующей ссылке также говорится, что эта статья устарела и устарела.
2.) Perl: $SIG{__DIE__}, eval { } and stack trace, но я не получил многого от этого, связанного с моими целями.
3.) Практический режим Perl (O'Reilly), глава 21 «Обработка ошибок и отладка». К счастью, весь мой код perl использует строгую информацию, и предупреждения включены, и наиболее важные вещи, упомянутые в главе 6 «Кодирование с помощью mod_perl in Mind», уже выполнены.
4.) Я прорыл оглавление в «Изучении Perl», «Perl Cookbook», «Программирование Perl» и «Perl высшего порядка» и не видел ничего, что торчало на меня. Если вы думаете, что я что-то пропустил, пожалуйста, дайте мне знать. :)
Я не помню, где (возможно, в «Практической mod_perl», но я читал, что вы не должны связываться с $ SIG {__ DIE__}.
Являются ли ваши сценарии реальными сценариями mod_perl или вы просто запускаете скрипты CGI в качестве скриптов ModPerl :: Registry для повышения производительности? –
Мои сценарии будут (должны) выполнять то же самое в любой среде. – rakhavan
Думаю, вам стоит пересмотреть свое мнение о блоках try/catch. Они не совсем грязные или грубые, если они используются на правильном уровне. – innaM