print STDERR
コードベース内の既存のステートメントを置き換えたい。
どうやら、目にはあまり合わないようですが、それは私だけですか。ハンドラーwarn
によってキャッチされることを知って使用する必要があります。$SIG{_WARN_}
または、より良いオプションがあります。はいの場合、なぜこれらのオプションを使用せずに使用するのですかprint STDERR
。
print STDERR
コードベース内の既存のステートメントを置き換えたい。
どうやら、目にはあまり合わないようですが、それは私だけですか。ハンドラーwarn
によってキャッチされることを知って使用する必要があります。$SIG{_WARN_}
または、より良いオプションがあります。はいの場合、なぜこれらのオプションを使用せずに使用するのですかprint STDERR
。
の利点print STDERR
は、何が起こるかをすぐに確認できることです。つまり、何かを STDERR に出力します。これは、デバッグ メッセージか何かである可能性があります。
warn
関数はわずかに異なります。
おそらくこれは、データのログ記録ではなく、警告に使用する必要があります
Carp
関数ファミリーにも興味があるかもしれません。carp
のようwarn
に動作しますが、呼び出し元からの行番号/ファイルを報告します。スタックトレースを使用しますcluck
。warn
しかし、あなたが自分自身を転がすことを妨げるものは何もありません。機能的に同等のサブは次のようにprint STDERR
なります。
sub debug { print STDERR @_ }
s/print STDERR/debug/g
その1回の出現を除いて、文字通りあなたの情報源を得ることができます。debug
また、引数の周りのかっこを省略できるようにする場合は、使用する前にその関数を宣言またはインポートする必要があります。
debug "this ", "is ", "DATA";
考慮すべき点: サブルーチンの呼び出しは遅いprint
ですが、組み込みのオペコードです。美しさとパフォーマンスを交換することも、その逆も可能です。
debug
ラップするサブルーチンを作成すると、単純なorステートメントが提供するprint STDERR
以上の柔軟性が得られます。たとえば、デバッグ メッセージをオフにしたり、メッセージを別の宛先にリダイレクトしたりできます。たとえば、頭のてっぺんから:print
warn
sub debug {
my ($msg, %param) = @_;
$param{level} //= 1; # default if no level specified
return if $param{level} < $config{log_level};
given ($param{dest}) {
when ('mail') { send_email_to_admin(subject => "Application Error!", body => $msg) }
when ('log') { write_to_logfile($msg) }
default { print STDERR $msg }
}
}
debug('foo'); # goes to STDERR by default
$config{log_level} = 2;
debug('bar'); # message is ignored as unimportant at current logging level
debug('bar', level => 3, dest => mail); # still important; gets emailed to admin