package Action; use Moo; has interface => (is => 'ro'); has implementation => (is => 'ro'); our %action = (IA => sub {&intIimpA;}, IB => sub {&intIimpB;}, IC => sub {&intIimpC;}, ); sub doAction { my $self = shift; &{$action{$self->interface . $self->implementation}}; } # sub intIimpA{ # implementation code in here } sub intIimpB{ } sub intIimpC{ } 1;