Joe*_*Fan 1 perl exception-handling
我有一个Perl Web应用程序,并希望记录所有未捕获的异常(uneval'ed die's).我的第一个想法是做这样的事情:
use Carp 'cluck';
sub main {
my $logfile ="/some/path/logfile.txt";
open STDERR, ">>$logfile";
# main logic
...
}
sub eval_main {
eval {
main;
};
if ($@) {
cluck $@;
close STDERR;
# redirect to "friendly error page"
....
}
}
eval_main;
Run Code Online (Sandbox Code Playgroud)
有比这更好的方法吗?
编辑:添加重定向
只需使用$SIG{__DIE__}处理程序.请参阅perlvar中的%SIG:
$SIG{__DIE__} = sub {
open LOG, ">>my/error.log";
print LOG @_;
close LOG;
print STDERR @_;
exit 1;
};
sub main {
...
}
main();
Run Code Online (Sandbox Code Playgroud)