- 締切済み
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が正しい引数かどうかを確認するのは、ちょっと難しいので、やはり、エラーをキャッチする方向で考えたいです。 ほかにどのような方法があるか教えてください。。
- みんなの回答 (1)
- 専門家の回答
みんなの回答
noname#25358
回答No.1
$ccc に返る値を判別するんじゃなくてですか? であれば、Perl には例外処理がないので、シグナルをキャッチするしかないんじゃないかと思います。 たとえば、 $SIG{'TERM'} = "terminal"; と宣言すると、TERM シグナルが発生した場合に自動的に terminal(); 関数が呼ばれます。 利用可能なシグナルの一覧を調べるには、 perl -e "$,=qq/\n/;print keys(%SIG);" をコマンドラインから入力してください。
お礼
シグナルよくわかっていなくて、 ちょっと調べたくらいじゃ、うまくいきませんでした。 $SIG{'TERM'} = "terminal"; 宣言すると、正常終了のときもterminalがよばれちゃいます。 シグナル勉強する前に if (eval{my $ccc = XML::AAA->new($aaa)}){ } else { &teminal; } とやってみると、なんとなく思惑通りに動いているっぽいので これで進めてみます。