package classes::module_proto; our %ActionsHash = ( "list" => { 'postaction' => \&list_all, }, "edit" => { 'postaction' => \&edit_one, }, ); sub new { my ($pkg, $name ) = @_; #------------------ my $Self = {}; #------------------ bless( $Self, (ref $pkg || $pkg) ); $Self->{'ActionHash'} = \%ActionsHash; # ... return $Self; } sub _handle_event { my $Self = shift; my $action = shift; # ... my $func = $actionshash->{ $action }->{'postaction'} ; # ... ($result, $error) = $func->(@_) ; # ... return ($result, $error); } sub edit_one { my $Self = shift; # ... return ( 1, undef); } sub list_all { my $Self = shift; # ... return ( 1, undef); } #------- package classes::module_sources; use classes::module_proto; our @ISA = qw(classes::module_proto); my %SourcesActionsHash = ( "list" => { 'postaction' => \&list_all, }, "edit" => { 'postaction' => \&edit_one, }, ); sub new { my ($pkg, $name ) = @_; #------------------ my $Self = $pkg->SUPER::new( $name ); bless( $Self, (ref $pkg || $pkg) ); $Self->{'ActionHash'} = \%SourcesActionsHash; return $Self; } sub list_all { my $Self = shift; # ... tu etwas spezielles mit sources return ( 1, undef); } #------- 1;