use lib 'modules'; #### package Base::MainApp; use Base::FooBar; sub new { my ($class, $prototype) = @_; unless (ref $prototype eq 'HASH') { $prototype = {foobar=>Base::FooBar->new()}; } my $self = bless $prototype, $class; return $self; } sub method_using_foobar { my ($self) = @_; $$self{foobar}->foobarize(); } #rest of module #### package Client1::MainApp; use base 'Base::MainApp'; use Client1::FooBar; sub new { my ($class, $prototype) = @_; unless (ref $prototype eq 'HASH') { $prototype = {foobar=>Client1::FooBar->new()}; } my $self = Base::MainApp::new($class,$prototype); return $self; } #rest of module