• 締切済み

perlのエラー処理

ライブラリ内部で発生したエラーをキャッチする方法がわかりません(>_<) ---------------------------------- #!/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が正しい引数かどうかを確認するのは、ちょっと難しいので、やはり、エラーをキャッチする方向で考えたいです。 ほかにどのような方法があるか教えてください。。

みんなの回答

noname#25358
noname#25358
回答No.1

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

to_kyo
質問者

お礼

シグナルよくわかっていなくて、 ちょっと調べたくらいじゃ、うまくいきませんでした。 $SIG{'TERM'} = "terminal"; 宣言すると、正常終了のときもterminalがよばれちゃいます。 シグナル勉強する前に if (eval{my $ccc = XML::AAA->new($aaa)}){ } else { &teminal; } とやってみると、なんとなく思惑通りに動いているっぽいので これで進めてみます。