21

perlcriticcroakは、die次のコード、完全に正常に動作するボイラープレート DBI のものは、

# Connect to database
my $db_handle = DBI->connect( $url, $user, $password ) or die $DBI::errstr;

これはすべて、ダイは私にとってはうまくいくようです。

Perl のサムライ戦士にとって、鳴き声は、物事がうまくいかないときに実際に死ぬよりも名誉に値すると思います。冗談はさておき

croak代わりになぜ私が必要なのdieですか?

perlcritic のアドバイスに耳を傾けないことの結果は何ですか?

4

6 に答える 6

36

http://www.perlmonks.org/?node_id=685452から

エラーがあなたまたはあなたのコードが正しくなかったことである場合、die を使用します。発信者が正しく行っていないときに croak を使用します。die "エラー: $!" エラーが発生した行にエラーがあることを示します。「エラー: $!」と鳴く は、呼び出し元がコードを呼び出した行にエラーがあることを示します。

この場合、エラー (DB への接続エラー) は呼び出し元とは関係なく、すべて接続を行う回線に関係するため、die.

于 2010-11-11T16:07:49.533 に答える
8

私は通常、次を使用します。

  • die "string"ユーザーに直接伝えたい致命的なメッセージの場合。私は主にスクリプトでこれを行います。
  • die $objectただし、ほとんどの例外クラスにはthrow、それを行うメソッドがあります。これは、呼び出し元がスローされたエラーの種類を認識し、そこから情報を抽出できるようにする場合に使用します。Mooseを使用している場合は、 ThrowableThrowable-Xをチェックしてください
  • croak "message"エイドリアンが言ったように、ユーザーが何か間違ったことをしたときのためのものであり、あなたのコードを呼び出したものでエラーを報告したい. 関数と API レベルのメソッドは、これの通常のケースです。
  • confess "message"例外の有用性がまだわからないライブラリ エラーの場合。これらは通常、例外的な状態ではなく、間違いであると思われる実行時エラーです。これらに例外を使用することは理にかなっています。特に、既に例外を使用している大規模なプロジェクトがある場合はそうです。しかし、これはエラーのあるスタック トレースを取得するための優れた簡単な方法です。
于 2010-11-11T16:50:06.227 に答える
3

die()使用するのが必ずしも間違っているわけではありませんが、問題のcroak()原因についてより多くの情報をユーザーに提供します。Carpこの出力を変更して多かれ少なかれ情報を取得できる名前空間に設定できる変数もあります。

と同等ですdie()が、より多くの情報と制御を備えています。

于 2010-11-11T16:06:23.410 に答える
0

まだ。他の人が指摘したように、接続パラメーターが入力から関数への直接のものである場合、この例では croak を使用することができます。

例外をトリガーするテストを自分で作成すると、自分のクライアントになり、どちらが優れているかを理解できます。

エラー状態をテストするのが非常に難しい場合は、ダイ オーバー クロークの可能性があります。ただし、エラーを検証するパラメーターはすべて croak を使用する必要があります。

于 2012-05-19T13:26:52.203 に答える