第64回 Error.pm でちょっとハマったので
第45回 Java的な例外処理 - bingo_nakanishiの他言語出身者のためのPerl入門
で、Error.pmを紹介しました。
Error.pmを使ったソース
で、今回、
次のようなコードを書いてみました。
use Error qw(:try); try { die 'OH'; }otherwise{ my $e = shift; print $e; };
これを実行すると、
OH at bingo.pl line 4.
となって行番号とファイル名まで表示されてしまいます。
しかし、ここでは、dieに与えた「OH」だけが欲しいとします。
$eには何が入ったか?
$eから at以下を削除すればいいんじゃないの? 正規表現かなにかで? と思いますが、それはなんか苦しい。
ここで、$eは何者なのかDumperで覗いてみましょう。
use Error qw(:try); use Data::Dumper; try { die 'OH'; }otherwise{ my $e = shift; print Dumper $e; };
結果:
$VAR1 = bless( { '-file' => 'bingo.pl', '-text' => 'OH', '-line' => '5', '-package' => 'Error' }, 'Error::Simple' );
おお! $eは($eが受け取ったもの)は、
Error::Simpleというものだったことがわかります。
しかも、結果からわかるとおりError::Simpleにblessされた無名ハッシュです。
おお! '-text'というキーにdieに与えた'OH'を持っていますね。これが使えます。
dieに与えたものをとりだすには '-text'キーを使う(下記、追記も参照のこと)
use Error qw(:try); try { die 'OH'; }otherwise{ my $e = shift; print $e->{'-text'}; };
結果:
OH
追記
use Error qw(:try); try { die 'OH'; }otherwise{ my $e = shift; print $e->text; };
結果:
OH
$e->textを使うのが正解っぽい。
Error - Error/exception handling in an OO-ish way - metacpan.org