Greetings!

References are good things.  They are useful.  They let you accomplish
useful things.

I hate them.

I have a class named User.  Here is it's constructor:

sub new
{
        my $class = shift;
        my $self = {};
        $self->{'loginName'} = '';
        $self->{'title'} = '';
        $self->{'firstName'} = '';
        $self->{'lastName'} = '';
        $self->{'phone'} = '';
        $self->{'email'} = '';
        bless $self, $class;
        return $self;
}

I have a class named UserList.  Here is its constructor:

sub new
{
        my $class = shift;
        my $self = {};
        # Create an anonymous empty hash to hold users
        $self->{'users'} = {};
        bless $self, $class;
        
        # If there was another argument, it will be the file name, and we can
load the list.
        if (defined($_[0]))
        {
                $self->Load($_[0]);
        }
        return $self;
}

Here is the function that creates a user and adds it to the user list:

sub AddUser
{
        my $self = shift;
        my $user = new User;
        ($user->{'loginName'},
         $user->{'title'},
         $user->{'firstName'},
         $user->{'lastName'},
         $user->{'phone'},
         $user->{'email'}) = @_;
        my $loginName = $user->{'loginName'};
        $self->{'users'}->{$loginName} = $user;
}

Here is the function of the UserList class that retrieves a user with a
given login name:

sub GetUser
{
        my $self = shift;
        my $userName = shift;
        my $user = new User;

        if (exists $self->{'users'}->{$userName})
        {
                $user = $self->{'users'}->{$userName};
        }
        else
        {
                $user = new User;
                $user->{'loginName'} = 'unknown';
        }
        return $user;
}

I have a routine named trace() that writes a string to a text file. 
The following two lines:

        $user = $userList->GetUser($logname);
        trace("User: $user->LoginName(), $user->FirstName(),
$user->LastName()\n");

give me the following result:

User: User=HASH(0x174c234)->LoginName(),
User=HASH(0x174c234)->FirstName(), User=HASH(0x174c234)->LastName()

I am losing track of what is a reference to what, and what needs to be
dereferenced into what, but I don't know why or what it is I need to
do.  I've done similar things elsewhere in this application without
this problem, but I don't see what I'm doing differently.  Can somebody
please explain this?

Thanks very much!

Rob Richardson




        
                
__________________________________
Do you Yahoo!?
Yahoo! Domains – Claim yours for only $14.70/year
http://smallbusiness.promotions.yahoo.com/offer 

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to