Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re: OO Perl: Methods To Reference Hash

by Mr. Muskrat (Canon)
on Jun 03, 2003 at 21:46 UTC ( #262804=note: print w/replies, xml ) Need Help??


in reply to OO Perl: Methods To Reference Hash

Why not just show us all of the real code instead of bits and pieces of several different scripts? Did you make the changes halley suggested? If you had, then it should work.

I had intended on combining your snippets with halley's but decided against it when I noticed several discrepancies between the OP and the replies.

Replies are listed 'Best First'.
Re: Re: OO Perl: Methods To Reference Hash
by P0w3rK!d (Pilgrim) on Jun 03, 2003 at 22:04 UTC
    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

      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

      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://262804]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2020-01-21 23:49 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Notices?