[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .

例外 もしくは 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 のエラーシステムと同程度なんですね。 数字が文字列に変わっただけです。

[HOME] [github] [twitter] [blog] [fml4] [fml8] [北海道] Powered by NetBSD and [nuinui.net] .
Copyright (C) 1993-2022 Ken'ichi Fukamachi mail:< fukachan at fml.org >