CGI::Application::Dispatchで例外キャッチ

ちょっとはまったので、メモがてらネットにリリース。
CGI::Applicationを使ってたアプリで、何かしら異常があったらメールを飛ばすようにしてたんですが、

use strict;
use warnings;
use CGIApp;
my $webapp = CGIApp->new();
eval{
    $webapp->run();
};
if($@){
    sendmail($@); # 警告メール送信処理
}

アプリが大きくなってきたのでCGI::Application::Dispatchを使用して

use strict;
use warnings;
use CGI::Application::Dispatch;
eval{
    CGI::Application::Dispatch->dispatch(default => 'Index');
};
if($@){
    sendmail($@); # 警告メール送信処理
}

とやると、Index.pmで例外が起きてもCGI::Application::Dispatchの中でキャッチして、よしなに処理を進めてしまうので、例外が外に出てきません。
ソースを見るとhttp_errorというメソッドで処理しているようなので、オーバーライド。

package MyApp;
use strict;
use warnings;
use base qw(CGI::Application::Dispatch);
sub http_error{
    my ($self , $exception , $url) = @_;
    sendmail($exception->error); # 警告メール送信処理
    $self->SUPER::http_error($exception , $url);
}
MyApp->dispatch(default => 'Index');

これで一応動いてます。