python における
try: statements except name: statements else: statementsに直接相当する機構は perl にはありません。 ですが、perl で同様のことを実現するためには次のような構文を用いること ができます。
# try
eval {
statement;
croak(""); # raise
}
# except
unless ($@) {
statements for exception;
}
# else
else {
statements;
}catch throw のようなフレーズを使えるするようにする perl module もあるのですが、 素直に eval $@ 機構を使う方が分かり易いと思います。
最大の問題は、どれだけのエラー情報を呼出側に伝えるかという作りの部分で すね。なやましいです。
croak() からどうやってトラップのエラー情報を上げるか?
一つの案は
croak("__ERROR_$keyword__");
croak("__ERROR_$keyword__: $reason");
形式です。
たとえば
croak("__ERROR_cgi.insecure__: $reason");
$keyword の部分で messages のキーを渡すようにする。
でも、パラメータは?…パラメータまではむずかしいなぁ。どうするかなこのレベルでは、UNIX のエラーシステムと同程度なんですね。 数字が文字列に変わっただけです。
my homepage is www.fml.org/home/fukachan/.
my free softwares are found at www.fml.org/software/.
fml 4.0 project homepage is www.fml.org/fml/menu.ja.html.
fml 8.0 (fml-devel) project homepage is www.fml.org/software/fml8/.
about one floppy bsd routers, see www.bsdrouter.org/.
Also, visit nuinui's world :) at www.nuinui.net.
For questions about me, e-mail <fukachan@fml.org>.
Copyright (C) 1993-2008 Ken'ichi Fukamachi
Powered by NetBSD.