いいえ、そうではありません。
あなたができることは次のとおりです。
コードにデバッグ コードを振りかけます。
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
に役立ちます:
use warnings qw(FATAL importantWarning);
または、独自の警告を作成するには、ドキュメントを参照してください
また、コール スタック トレースを取得するには、関数のさまざまな可能性を調べcaller
ます。基本的に、ニーズに合わない可能性があるため、Carp
モジュールの個人的な解釈を作成することをお勧めします。CGI::Carp