package Foo;
use MT::ErrorHandler;
@Foo::ISA = qw( MT::ErrorHandler );
sub class_method {
my $class = shift;
...
return $class->error("Help!")
unless $continue;
}
sub object_method {
my $obj = shift;
...
return $obj->error("I am no more")
unless $continue;
}
package main;
use Foo;
Foo->class_method or die Foo->errstr;
my $foo = Foo->new;
$foo->object_method
or die $foo->errstr;
MT::ErrorHandlerは、すべてのモジュール/クラスにおけるエラー処理メカニズムを提供します。他のクラスが、このクラスからエラー処理メソッドを継承して使えるようにするための基底クラスとして機能することを目的としています。こうした派生クラスでは、errorとerrstrという2つのメソッドを使って、呼び出し側のプログラムにエラーを伝えることができます。
理由が何であれ、失敗した場合には、サブクラスはerrorメソッドを呼び出し、それを呼び出し側に返す必要があります。errorは、内部でエラー・メッセージを設定した上で、undefを返します。この結果、失敗したメソッドが呼び出し側にundefを返すことになります。
呼び出し側では、戻り値がundefでないかどうかを調べてエラーをチェックし、エラーであればerrstrを呼び出してエラー・メッセージの値を取得しなければなりません。エラーが発生しなかったときにerrstrを呼び出した場合の動作は定義されていないため、意図した結果が得られることはほとんどないということに注意してください。
errorとerrstrは、クラス・メソッドとしてもインスタンス・メソッドとしても動作します。
Classに指定したクラス、または$objectに指定したオブジェクトのエラー・メッセージを$messageに設定します。戻り値はundefです。
Classに指定したクラス、または$objectに指定したオブジェクトに最後に設定されたエラー・メッセージにアクセスし、そのエラー・メッセージを返します。