Class::ErrorHandler provides an error-handling mechanism that's generic enough to be used as the base class for a variety of OO classes. Subclasses inherit its two error-handling methods, error and errstr, to communicate error messages back to the calling program.
URI::Fetch のサンプルにおける Ben のエラーハンドリングの仕方が見覚えあるなと思ってみていたら Class::ErrorHandler というクラスを使っていました。これは Movable Type のフレームワーク上で行われていたエラーハンドリングの方法をクラスにして CPAN にあげたものですね。実際、コードの中身は MT::ErrorHandler と一緒でした。
Class::ErrorHandler を継承したクラスには error メソッドと errstr メソッドが提供されます。
package Foo;
use base qw (Class::ErrorHandler);
sub method {
my $self = shift;
...
unless $condition or
return $class->error('error messages here.');
}
としてやると、method() の呼び出しもとに undef が返り、そのオブジェクトに対して errstr メソッドを発行してやるとメッセージが引きだせる、という仕組みです。
my $foo = Foo->new; $foo->method or die $foo->errstr;
このハンドリングの仕方、結構好きだったのですがこうして CPAN にアップされた(アップされたのは結構前なんですけど。)ということで心置きなく真似することができそうです。