#!/usr/bin/perl package classes::module_proto; use strict; use warnings; our %ActionsHash = ( "list" => { 'postaction' => sub { $_[0]->list_all() } }, "edit" => { 'postaction' => sub { $_[0]->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'} ; # ... my ($result, $error) = $func->( $Self, $action ) ; # ... 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 strict; use warnings; our @ISA = qw( classes::module_proto ); my %SourcesActionsHash = ( "list" => { 'postaction' => sub { $_[0]->list_all() } }, "edit" => { 'postaction' => sub { $_[0]->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); } #------- package main; use strict; use warnings; use Data::Dumper; my $sources = classes::module_sources->new(); print Dumper $sources->_handle_event( 'edit' ); ; __END__