名前¶
carp - エラーの警告 (呼び出し元の観点から)
cluck - スタックバックトレースを伴うエラーの警告 (デフォルトではエクスポートされません)
croak - エラーを出してdieします (呼び出し元の観点から)
confess - スタックバックトレースを伴ってdieします
shortmess - carpとcroakが生成するメッセージを返します
longmess - cluckとconfessが生成するメッセージを返します
概要¶
use Carp;
croak "We're outta here!";
use Carp qw(cluck);
cluck "This is how we got here!";
print FH Carp::shortmess("This will have caller's details added");
print FH Carp::longmess("This will have stack backtrace added");
説明¶
Carpルーチンはdie()やwarn()のように振る舞うため、モジュールで用いる際に 便利です。しかし、それに伴うメッセージはあなたのモジュールにおける ユーザーにとってより便利なものとなりそうです。cluck、confess及び logmessではその背景にコールスタック内の全ての呼び出しに関する要約が 存在します。より短いメッセージを排出するためにはcarp、croakもしくは shortmessを使うことによって、モジュールが呼び出された位置から エラーをリポートすることが可能です。本ルーチンはエラーメッセージが どこで発生したかを保証するものではありませんが、優れた推測機能を提供します。
ここにはshortmessにおける動作原理についての完全な説明があります。行われるのは エラーが存在しないことを伝えていない関数コールスタックの検索です。もし全ての 呼び出しが安全であるとマークされているならば、その動作をやめ、代わりにフルス タックバックトレースを提供します。言い替えれば真っ先にエラーが起きそうだと 疑うことは罪なことであると考えるのです。呼び出しがエラーを生成するべきでない と判断するルールの内容を下記に示します:
いかなるパッケージからもそれ自身に対しては安全とします。
パッケージはその呼び出し上で、あるいはパッケージが@CARP_NOT又は (もしその配列が空ならば)@ISAに含まれ、明らかに安全なものとしてマークされて いるパッケージ上でエラーが存在しないであろうことを主張します。 5.8では@ISAによってオーバーライドする機能が新しくなっています。
アイテム2における信頼は推移的です。もしAがBを信頼し、BがCを信頼するならば、 AはCを信頼するのです。よってもしあなたが@CARP_NOTとともに@ISAをオーバーライド しなければ、この信頼関係が"継承された"と言えるのです。
いかなる内部のPerlモジュールからの呼び出しも安全です。(ユーザーモジュールに Perl内部のものであるとして自分自身をマークしないようにすることはしません。 この事実はがっかりさせるものであります。)
Carpに対するどんな呼び出しも安全です。(これはcarp/croak/shortmessを 呼び出した箇所のエラーをリポートさせないようにするルールです。)
スタックトレースの強制¶
デバッグを行う目的で、あなたは全てのモジュールに渡ってCarpに croakをconfessとして、carpをcluckとして扱うよう強制することが 可能です。言い替えれば、より詳細なスタックトレースを提供するよう 強制するのです。これは何故、あるいはどこから警告又はエラーが 生成されるのかを知ろうとする際大きな助けとなり得るのです。
この特色はシンボル'verbose'を'インポート'することで使用可能となります。 一般的には次のように宣言することで可能になります。
perl -MCarp=verbose script.pl
あるいは環境変数PERL50PTにMCarp=verbose
を含めることでも可能になります。
バグ¶
Carpルーチンは今のところexceptionオブジェクトをハンドルしていません。 もし最初の引数がリファレンスであれば、単純にdie()あるいはwarn()を 適切に呼び出します。
翻訳者¶
三浦真磁 <snj@users.sourceforge.jp>