不,不是。
你可以做的事情是:
在你的代码中添加调试代码。
use constant DEBUG => 1;
...;
debug_function($var) if DEBUG;
一旦取消设置DEBUG
部署常量,您将不会有任何额外的运行时成本(语句已被优化掉),并且您可以在必要时重新激活它们。
你甚至可以说一些邪恶的话,比如
BEGIN {require Data::Dumper if DEBUG}
有条件地加载调试模块。
如果你想覆盖核心函数,为什么不添加调试处理程序呢?那不是邪恶的修补,那是增强……</p>
BEGIN {
if (DEBUG) {
my $oldfunction = \&CORE::function;
*CORE::function = sub { # add prototypes if you like them
debug_handler(@_);
&$oldfunction;
};
}
}
使用此技术记录您对数据库的调用。
您可以重新打开STDERR
一些特殊文件(或管道,或终端,或......)
BEGIN {
if (DEBUG) {
close STDERR or die "STDERR hates me and doesn't want to be closed.";
open STDERR, '>', "/path/to/my/error/log.file" or die "couldn't open error log";
}
}
你可以定义你的DIE
和WARN
处理程序来做你想做的事情:
$SIG{__WARN__} = sub {
print MYERRORS "There was a warning: $!";
# do additional error handling unless you're paranoid
}
warnings
pragma 可以帮助您使重要的警告变得致命:
use warnings qw(FATAL importantWarning);
或创建自己的警告,只需查看文档
要获取调用堆栈跟踪,请查看该caller
函数的众多可能性。本质上,您可能希望构建您对Carp
模块的个人解释,因为CGI::Carp
可能无法满足您的需求。