package MyApp::ControllerOne;
use base 'MyApp::Base';
$self->sis->add_event("event name");
$self->sis->log_event("message");
$self->sis->uuid();
package MyApp::Base;
use base 'CGI::Application';
sub sis {
my $self = shift;
unless ( $self->{__sis} ) {
$self->{__sis} = Company::Dept->new($dbh, $uname);
}
return $self->{__sis};
}
####
package Company::Dept;
sub new {
my $class = shift;
my $self = {};
my ($dbh, $uname) = @_;
$self->{ __dbh } = $dbh;
$self->{ __uname } $uname;
bless ($self, $class);
return $self;
}
sub log_event {
my ($self, $msg) = @_
unless ( $self->{__elog} ) {
$self->{__elog} = Company::Dept::EventLogging->new( $self->dbh, $self->uuid ) ;
}
$self->{__elog}->log_event( $msg );
}
sub add_event {
my ($self, $msg) = @_
unless ( $self->{__elog} ) {
$self->{__elog} = Company::Dept::EventLogging->new($self->dbh, $self->uuid ) ;
}
$self->{__elog}->add_event( $msg );
}
sub uuid {
my $self = shift;
unless ( $self->{__uuid} ) {
$self->{__uuid} = Company::Dept::UUID->uuid($self->dbh, $uuid ) ;
}
return $self->{__uuid} ;
}
sub dbh { return $self->{__dbh} }
sub uname {return $self->{__uname} }
####
package Company::Dept::EventLogging;
sub add_event { }
sub log_event { }
package Company::Dept::AnotherUtilityModule;
sub aaa { }
sub bbb {}