p_chinのおっぱいブログ

UnityとPerlなど

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;