Mojo::Exception - 状況つきの例外
使い方
use Mojo::Exception; # 例外を投げて、スタックトレースを表示 eval { Mojo::Exception->throw('Something went wrong!') }; say "$_->[1]:$_->[2]" for @{$@->frames}; # 例外のカスタマイズ eval { my $e = Mojo::Exception->new('Died at test.pl line 3.'); die $e->trace(2)->inspect->verbose(1); }; say $@;
説明
Mojo::Exceptionは状況の情報のついた例外のためのコンテナです。
属性
Mojo::Exceptionは次の属性を実装しています。
frames
my $frames = $e->frames; $e = $e->frames([$frame1, $frame2]);
スタックトレース(もし利用可能であれば)。
# 最後のフレームからの情報を抽出 my ($package, $filename, $line, $subroutine, $hasargs, $wantarray, $evaltext, $is_require, $hints, $bitmask, $hinthash) = @{$e->frames->[-1]};
line
my $line = $e->line; $e = $e->line([3, 'foo']);
例外が発生した行(もし利用可能であれば)。
lines_after
my $lines = $e->lines_after; $e = $e->lines_after([ [1, 'bar'], [2, 'baz'] ]);
例外が発生したラインの後の数行(もし利用可能であれば)。
lines_before
my $lines = $e->lines_before; $e = $e->lines_before([ [4, 'bar'], [5, 'baz'] ]);
例外が発生した行の前の数行。
message
my $message = $e->message; $e = $e->message('Oops!');
例外メッセージ。
verbose
my $bool = $e->verbose; $e = $e->verbose($bool);
詳細な描画を有効にします。デフォルトはMOJO_EXCEPTION_VERBOSE
の値か0
です。
メソッド
Mojo::ExceptionはMojo::Baseのすべてのメソッドを継承しており、 次の新しいメソッドを実装しています。
inspect
$e = $e->inspect; $e = $e->inspect($source1, $source2);
「lines_before」と「line」と「lines_after」をコンテキスト情報で満たすために、 「message」と「frames」とオプショナルな追加のソースを検査します。
new
my $e = Mojo::Exception->new; my $e = Mojo::Exception->new('Died at test.pl line 3.');
新しいMojo::Exceptionオブジェクトを生成し、必要であれば、メッセージを設定します。
to_string
my $string = $e->to_string;
例外を描画します。
throw
Mojo::Exception->throw('Oops!'); Mojo::Exception->throw('Oops!', $files);
スタックトレースつきの例外を発生させます。
trace
$e = $e->trace; $e = $e->trace($skip);
スタックトレースを保存します。デフォルトでは、1コールフレームをスキップします。
# 3コールフレームをスキップ $e->trace(3); # コールフレームをスキップしない $e->trace(0);
演算子
Mojo::Exceptionは次の演算子をオーバーロードしています。
ブール
my $bool = !!$e;
いつでも真。
文字列化
my $str = "$e";
to_string
のエイリアス。
参考
Mojolicious, Mojolicious::Guides, http://mojolicio.us.
(Mojolicious 8.12を反映。2019年5月14日)