package my::Plugin::ErrorHandler; sub new { my $class = shift; my $handler = shift; return bless({ handler => $handler, args => [ @_ ] }, $class); } my %dispatch = ( a => \&my::Plugin::undo_a, b => \&my::Plugin::undo_b, c => \&my::Plugin::undo_c, ); sub handle_error { my ($self) = @_; $dispatch{ $self->{handler} }->(@{ $self->{args} }) }