perlの素の例外処理
perlには例外処理が無いからTry::Tinyとかの例外処理用のモジュールがあるって認識だったけど、違った。
evalの例外処理について
- Try::Tinyは以下のevalを使った例外処理の記述をtry{}catch{}にして例外を返してくれるモジュールだった。
eval { die 'fugu' }; if (my $err = $@) { # $@の中に例外'fugu'が入っている }
- ちなみにevalは文字列をコードとして評価する機能も持っている
my $code = "say 'fugu'"; eval $code;
と書くとsay関数が呼ばれてhogeと言う
まとめ
テストとかでちょこっと例外受け取りたい場合にはevalで書くのもいいかもしれない
use Test::More; local $@; eval { die 'fugu is die. reason come oppai.' }; like $@, qr/fugu is die/; done_testing;