プロが教えるわが家の防犯対策術!

ライブラリ内部で発生したエラーをキャッチする方法がわかりません(>_<)

----------------------------------
#!/usr/bin/perl

use XML::AAA;

my $aaa = "bbb";
my $ccc = XML::AAA->new($aaa);
----------------------------------

こんなスクリプトを書いたとします。
XML::AAAが、newするときにXML::BBBを使っているとします。
引数が不正でXML::BBBでエラーが発生したときに
どうやってそのエラーをキャッチしたらいいかわかりません。

eval{my $ccc = XML::AAA->new($aaa);}
if($@){&error_handling;}

とやってみても、うまくキャッチできません。

また、$aaaが正しい引数かどうかを確認するのは、ちょっと難しいので、やはり、エラーをキャッチする方向で考えたいです。

ほかにどのような方法があるか教えてください。。

A 回答 (1件)

 $ccc に返る値を判別するんじゃなくてですか?


 であれば、Perl には例外処理がないので、シグナルをキャッチするしかないんじゃないかと思います。
 たとえば、
  $SIG{'TERM'} = "terminal";
 と宣言すると、TERM シグナルが発生した場合に自動的に terminal(); 関数が呼ばれます。
 利用可能なシグナルの一覧を調べるには、
  perl -e "$,=qq/\n/;print keys(%SIG);"
 をコマンドラインから入力してください。
    • good
    • 0
この回答へのお礼

シグナルよくわかっていなくて、
ちょっと調べたくらいじゃ、うまくいきませんでした。

$SIG{'TERM'} = "terminal";
宣言すると、正常終了のときもterminalがよばれちゃいます。

シグナル勉強する前に
if (eval{my $ccc = XML::AAA->new($aaa)}){
} else {
&teminal;
}
とやってみると、なんとなく思惑通りに動いているっぽいので
これで進めてみます。

お礼日時:2006/06/02 13:41

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!