Package User sub new { my ($class, $username) = @_; my $self->{username} = $username; # connect to server and store connection details in $self->{server} bless $self, $class; } sub get { my $self = shift; # call server using $self->{server} adding session_id if we have one } sub login { my $self = shift; $self->get('login'); # will store session_id in User object } sub get_accounts { my $self = shift; return $self->get('accounts'); } sub open_account { my ($self, $account_id) = @_; my $self->{account} = User::Account->new(account_id); return $self->{account}; } Package Account our @ISA = qw(User); sub balance { # needs to call User::get but does not have session id or server info }