package company::api; use company::logging; use company::user; sub new { my $class = shift; my $dbh = shift; my $uname = shift; my $self = {}; $self->{__dbh} = $dbh; $self->{__log} = company::logging->new($self->{__dbh}); $self->{__user} = company::user->new($self->{__dbh}, $uname ); bless $self, $class; } sub log_event { my ($self, $log) = @_; $self->{__log}->log_event($log); } sub uid { my $self = shift; unless ( $self->{__uid} ) { $self->{__uid} = $self->{__user}->get_uuid(); } return $self->{__uid}; } ##### usage from webapp package MyWebApp::Base; sub api { unless ($self->{__api}) { $self->{__api} = company::api->new( MyWebApp::DB->dbh, $ENV{REMOTE_USER} ); } return $self->{__api}; } package MyWebApp::ControllerOne use base 'MyApp::Base'; sub testing { my $uid = $self->api->uid; $self->api->log_event("$uid is testing"); }