#navi_header|Perl| 今回のコードピースは簡単すぎる。実際はより複雑な場合や、スタックトレースを活用したい場合もあり得ると思われる。そういったシーンのコードピースはまた、時間をおいてリベンジをかけたい。 * 多段呼び出し時のcatch動作を確認 - コードピース #!/usr/bin/perl use strict; use warnings; use Data::Dumper; use Error qw(:try); # 関数の中でthrowしてみる sub t01 { try { throw Error(-text => "through test!!"); } catch Error with { my $e = shift; print "======= in t01\n"; $e->throw(); }; } try { &t01(); } catch Error with { my $e = shift; print "----- in main\n"; print Dumper($e), "\n"; }; # 一段関数呼び出しを増やしてみる sub t02 { &t01(); } try { &t02(); } catch Error with { my $e = shift; print "----- in main\n"; print Dumper($e), "\n"; }; - 出力 ======= in t01 ----- in main $VAR1 = bless( { '-file' => './try06.pl', '-text' => 'through test!!', '-line' => 12, '-package' => 'main' }, 'Error' ); ======= in t01 ----- in main $VAR1 = bless( { '-file' => './try06.pl', '-text' => 'through test!!', '-line' => 12, '-package' => 'main' }, 'Error' ); 基本的に、多段で組んだ場合も問題なくcatchできているようである。 もともとError.pmにおいてcatchは%SIG{__DIE__}機構を用いて実現している。多段で組んでも特に問題無いと言える。 #navi_footer|Perl|