Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things
 
PerlMonks  

Re: Re: OO Perl: Methods To Reference Hash

by P0w3rK!d (Pilgrim)
on Jun 03, 2003 at 22:04 UTC ( #262810=note: print w/replies, xml ) Need Help??


in reply to Re: OO Perl: Methods To Reference Hash
in thread OO Perl: Methods To Reference Hash

Yes. All the changes were made. I showed you only what I thought was necessary within the object. The problem is that when the object is instantiated, and the set() and get() methods are called afterwards, the hash gets corrupted somehow.

The data is set like this in the hash:

$hshFoo{$keyNew} = $strFile; # Ex: # $hshFoo{"203000"} = "203000.xml";
####################### # here is the code... sub get_hshAgg { my $self = shift; return %{$self->{hshAgg}}; } sub set_hshAgg { my $self = shift; my %hshToAgg = shift; $self->{hshAgg} = \%hshToAgg; } sub run { my $self = Foo->new(@_); my %hshToAgg = (); my $class; ( $class, %hshToAgg ) = @_; $self->set_id($intID); $self->set_hshAgg(%hshToAgg); use Data::Dumper; print Dumper \%hshToAgg; # OUTPUT: THIS WORKS! #$VAR1 = { # '2030000' => '2030000.XML', # '2030001' => '2030001.XML', # '2030002' => '2030002.XML' # }; print "After instantiation\n"); my %hshTest = $self->get_hshAgg(); print Dumper \%hshTest; # OUTPUT: THIS DOES NOT WORK! #$VAR1 = { # '2030000' => undef # }; }
I do not understand where the data is getting lost.

-P0w3rK!d

Replies are listed 'Best First'.
Re: Re: Re: OO Perl: Methods To Reference Hash
by Mr. Muskrat (Canon) on Jun 03, 2003 at 22:21 UTC

    You are correct. Your get and set methods will not work. I should have looked closer at the code in the OP and the replies.

    This appears to work though.

    sub get_hshAgg { my $self = shift; return $self->{hshAgg}; } sub set_hshAgg { my $self = shift; my $hshToAgg = shift; $self->{hshAgg} = $hshToAgg; } sub run { my $self = Foo->new(@_); my %hshToAgg = (); my $class; ( $class, %hshToAgg ) = @_; $self->set_id($intID); $self->set_hshAgg(\%hshToAgg); use Data::Dumper; print Dumper \%hshToAgg; print "After instantiation\n"; my %hshTest = %{$self->get_hshAgg}; print Dumper \%hshTest; }

      I see the problem now. Look here:
      # My Set Method sub set_hshAgg { my $self = shift; my %hshAgg = shift; <-------- use of % $self->{hshAgg} = %hshAgg; } # Your Set Method sub set_hshAgg { my $self = shift; my $hshAgg = shift; <-------- use of $ $self->{hshAgg} = %hshAgg; }

      Thanks for your reply :)

      -P0w3rK!d

Re: Re: Re: OO Perl: Methods To Reference Hash
by P0w3rK!d (Pilgrim) on Jun 03, 2003 at 22:20 UTC
    I changed the set method to this and it works now, but why? Do you have to do something special when passing in the hash to the set method? Is this the best practice?
    sub set_hshAgg { my $self; my %hshToAgg; ( $self, %hshToAgg ) = @_; $self->{hshAgg} = \%hshToAgg; }

    Thank you :)

    -P0w3rK!d

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://262810]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (6)
As of 2019-12-05 19:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Strict and warnings: which comes first?



    Results (151 votes). Check out past polls.

    Notices?