メモ: Error.pm でサブクラス化した例外を投げる

例外を投げるときは $obj->throw。ベースクラスは Error::Simple。

try {
  MyException->new("hello world")->throw;
} catch MyException with {
  my $e = shift;
  print "$e\n";
};

package MyException;
use base qw(Error::Simple);

みたく書く、色々教えてもらった結果理解した。miyagawa++ tokuhirom++

8/28追記: ちなみに Error::Simple がセットする $@ は例外として送出されるオブジェクトで、かつ Error::Simple は stringify をオーバーライドしているので、eval を使って例外監視している場合もちゃんと動く。

eval {
  MyException->new("hello world")->throw;
};
if ($@) {
  print ref $@;  # prints MyException
  print $@;      # prints "hello world"
}