例外 もしくは long jump 機構

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() からどうやってトラップのエラー情報を上げるか?

一つの案は

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.