提前感谢大家。
我一直在对错误处理进行一些研究,但我觉得我并没有对我应该做什么有充分的了解。
前言:我的代码位于 Apache 中并在浏览器中执行,我的目标不包括命令行执行。
我希望具有 CGI::Carp (fatalsToBrowser) 的行为,能够捕获输出并能够将其放入我自己的模板页面中,通过电子邮件发送等...我确实注意到 fatalsToBrowser 不起作用与 mod_perl。有谁知道为什么? Apache/mod_perl 是如何阻碍的?
第一个目标:我想将一些东西放在一起,以便在使用 mod_perl 或 mod_cgi 执行代码时可以正常工作。
第二个目标:我希望有一个高级方法来捕获类似于.NET 的 Application_Error (在 global.asax 中)和 PHP 的 set_exception_handler() 和 set_error_handler() 方法的所有错误。这些允许您在引发错误时进行控制,而无需将代码包装在混乱的 /gross try-catch 语句中。
我读过/评论过的东西:
1.) Perl 中的 OO 异常处理 http://www.perl.com/pub/a/2002/11/14/exception.html,但不是我要找的。我想捕捉的大多数东西都是 die()ing。下一个链接还指出这篇文章已过时且已弃用。
2.) Perl:$SIG{__DIE__}、eval { } 和堆栈跟踪 https://stackoverflow.com/questions/971273/perl-sigdie-eval-and-stack-trace,但我并没有从中得到太多与我的目标相关的东西。
3.) Perl 实用模式 (O'Reilly),第 21 章“错误处理和调试”。值得庆幸的是,我所有的 Perl 代码都使用严格的并且启用了警告,并且第 6 章“用 mod_perl 进行编码”中提到的最重要的事情已经完成。
4.) 我翻遍了《Learning Perl》、《Perl Cookbook》、《Programming Perl》和《Higher Order Perl》的目录,但没有看到任何让我印象深刻的内容。如果您认为我错过了某些内容,请告诉我。 :)
我不记得在哪里(也许在“实用 mod_perl”中,但我读到你不应该弄乱 $SIG{__DIE__}。