my $someframework = SomeFramework->new(parameter => 'value'); #### has 'logger' => ( is => 'ro', isa => 'SomeFramework::Logger', reader => 'get_logger', writer => '_set_logger', builder => '_build_logger', lazy => 1 ); sub _build_logger { my $self = shift; SomeFramework::Logger->new(someframework => $self); } #### has 'someframework' => ( is => 'ro', isa => 'SomeFramework', reader => 'get_someframework', writer => '_set_someframework', required => 1 ); #### my $configuration = $self-> get_someframework-> get_configuration-> get_blah_blah; #### my $configuration = $self-> get_someframework-> get_somesubsystem-> get_somecomponent-> get_configuration-> get_blah_blah; #### my $configuration = $self->sc->ss->sf->conf->blah_blah; #### has 'some_framework' => ( is => 'ro', isa => 'SomeFramework', reader => 'sf', writer => '_set_someframework', required => 1 ); #### has 'some_framework' => ( is => 'ro', isa => 'SomeFramework', reader => 'get_someframework', writer => '_set_someframework', required => 1, alias => 'sf' ); #### has 'api' => ( is => 'ro', isa => 'SomeFramework::API', reader => '_get_api', writer => '_set_api', required => 1, alias => 'api' ); #### has 'api' => ( is => 'ro', isa => 'SomeFramework::API', reader => '_get_api', writer => '_set_api', required => 1, handles => { api => 'return_self' # ^^^ It's supposed to have some method that # returns the reference to its own object } );