############### package Obj::Bar; sub bar { my $self = shift; my $id = $self->id; my $dbh = $self->dbh; unless ($self->{bar}) { # check if bar is in cache if (exists $Obj::bar_cache{$id}) { # return from cache $self->{bar} = $Obj::bar_cache{$id}; } else { $Obj::bar_cache{$id} = Obj::G * query_bar_from_db_using($dbh, $id); $self->{bar} = $Obj::bar_cache{$id}; } } return $self->{bar}; } 1;