home ホーム search 検索 -  login ログイン  | reload edit datainfo version cmd icon diff delete  | help ヘルプ

Perl/codepiece/try-catch-exception03 (v1)

Perl/codepiece/try-catch-exception03 (v1)

Perl / codepiece / try-catch-exception03 (v1)
id: 118 所有者: msakamoto-sf    作成日: 2007-03-17 22:55:36
カテゴリ: 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__}機構を用いて実現している。多段で組んでも特に問題無いと言える。



プレーンテキスト形式でダウンロード
現在のバージョン : 1
更新者: msakamoto-sf
更新日: 2008-12-24 22:56:53
md5:2b1e1afee5176fdddf2bdf18812bb8d5
sha1:c4b0948462af7797d5f01bd888b0a908f8a98fa5
コメント
コメントを投稿するにはログインして下さい。