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以上の柔軟性が得られます。たとえば、デバッグ メッセージをオフにしたり、メッセージを別の宛先にリダイレクトしたりできます。たとえば、頭のてっぺんから:printwarn
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