Try::Tiny は、Perl 5.14 以降の例外処理にまだ推奨されますか?
質問
Perl コミュニティのコンセンサスは、以下のようなものです。
Try::Tiny
は例外を処理するための好ましい方法です。
Perl 5.14 (これは私が使っているバージョンです)
は解決するようです。
は
の問題
と
eval
その
Try::Tiny
のアドレスになります。ウィル
Try::Tiny
は、まだ私に何らかの利益をもたらしてくれるのでしょうか?
どのように解決するのですか?
私の答えは不評ですが、Perl プログラマは、Perl で "exceptions" と呼んでいるものの非常に貧弱な概念を使おうとしてはいけないと思います。これらは本質的にサイドチャンネルの戻り値なのです。しかし、例外のアイデアに魅了され、状態を渡すためにグローバル変数を使用するすべての複雑さを考慮しても、人々はそれを動作させようとし続けています。
しかし、実際には、人々は
die
を失敗の合図に使います。と言う人もいるでしょうが、その場合は
die
で参照し、エラーオブジェクトを返すという方法もありますが、その場合は
die
は必要ありません。せっかくオブジェクトがあるんだから、オブジェクトの力を全部使おうよ。
sub some_sub {
...
return Result->new( error => 1, description => ... ) if $something_went_wrong;
return Result->new( error => 0, ... );
}
my $result = some_sub( ... );
if( $result->is_error ) { ... };
これは、グローバル変数や、離れた場所での動作、スコープの頭痛の種を伴わないし、特別な特殊機能も必要ありません。あなたは小さなクラス
Result
という小さなクラスを作り、戻り値をラップすることで、識別性のない単一の値ではなく、構造化されたデータを持つことができます。戻り値が何を意味するのか、もう迷うことはありません。これは
undef
は本当の値なのか、それとも失敗を示すものなのか?戻り値は定義されていれば良いのか、それとも真であれば良いのか?これらのことを、あなたのオブジェクトは教えてくれるのです。そして、同じオブジェクトに
die
. ですでにオブジェクトを使用している場合、そのオブジェクトは
die
ですでにオブジェクトを使用していて、それを戻り値として使っているのであれば、 このオブジェクトを許容するためにしなければならない余計なことはほとんどありません。
$@
.
これについては 例外を投げる代わりにエラーオブジェクトを返します。
とはいえ、他人のやることはどうしようもないので、やはりPerlには例外があるということにしておく必要がありますね。
関連
-
[解決済み] Node.jsの例外処理のベストプラクティス
-
[解決済み] 最近のPerlはなぜデフォルトでUTF-8を避けるのですか?
-
[解決済み] Perlでファイルが存在するかどうかを確認するにはどうすればよいですか?
-
[解決済み] Perl のフラグ -pe, -pi, -p, -w, -d, -i, -t?
-
[解決済み] Perlのハッシュのキーを反復処理する最も安全な方法は何ですか?
-
[解決済み] Perlでハッシュを結合するには?
-
[解決済み] Perlで変数が数値を持っているかどうかを判断するには?
-
[解決済み] Perl で、$variable が定義され、長さが 0 でない文字列を含んでいるかどうかを簡潔に確認するにはどうしたらよいですか?
-
[解決済み] 非 root ユーザーで CPAN を使用するにはどうすればよいですか?
-
PerlでYYYY-mm-dd HH:MM:SSを高速に取得する
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] なぜPerl 5の関数プロトタイプはダメなのか?
-
[解決済み] Perlのハッシュのキーを反復処理する最も安全な方法は何ですか?
-
[解決済み] なぜstrictとwarningを使うのか?
-
[解決済み] Perlでハッシュを結合するには?
-
[解決済み] Perl CGI スクリプトのトラブルシューティングはどのようにすればよいですか?
-
[解決済み] Perlで変数が数値を持っているかどうかを判断するには?
-
[解決済み] use utf8;を使用すると「印刷時の文字が太い」と言われる
-
[解決済み] Perl で、$variable が定義され、長さが 0 でない文字列を含んでいるかどうかを簡潔に確認するにはどうしたらよいですか?
-
[解決済み] 非 root ユーザーで CPAN を使用するにはどうすればよいですか?
-
[解決済み] cpan`経由でインストールしたPerlモジュールをデインストールするにはどうすればよいですか?