Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic
 
PerlMonks  

Re: Hash references moving between modules

by castaway (Parson)
on Jan 10, 2003 at 18:36 UTC ( #225903=note: print w/ replies, xml ) Need Help??


in reply to Hash references moving between modules

Hi,
I don't think your $cvterm_id holds what you think it does at all.

my $cvterm_id; # this scalar is going to be a hashref while (my $hashref = $sth->fetchrow_hashref) { $$cvterm_id{$$hashref{termname}} = $$hashref{cvterm_id}; }
$cvterm_id is a scalar with no content at the beginning.
You get a $hashref from somewhere.
"$$hashref{cvterm_id}" is extracting the item called 'cvterm_id' from a hash called whatever is in $hashref. Eg. if $hashref = 'fred' then it's looking at element 'cvterm_id' in %fred. I'm not sure thats what you want.
Likewise the result is being written into a hash with no name (as $cvterm_id is undefined, no idea what that actually does..), in the element called $fred{termname}

If $cvterm_id is going to be a hash reference, you need to use it like this:

my $cvterm_id; # this scalar is going to be a hashref while (my $hashref = $sth->fetchrow_hashref) { $cvterm_id->{$$hashref{termname}} = $$hashref{cvterm_id}; }
If $hashref is also a real hash reference and not just the name of a hash, then you need this:
my $cvterm_id; # this scalar is going to be a hashref while (my $hashref = $sth->fetchrow_hashref) { $cvterm_id->{$hashref->{termname}} = $hashref->{cvterm_id}; }
Then the second package should work.

Try looking at the contents of $cvterm_id in the second package after the while loop, using Data::Dumper for instance. (use Data::Dumper; print Dumper($cvterm_id);)
I hope that helps,
C.
PS: Dereferencing references using the arrow operator is explained on page 253 of the Camel book (3rd edition)


Comment on Re: Hash references moving between modules
Select or Download Code
Re: Re: Hash references moving between modules
by scain (Curate) on Jan 10, 2003 at 18:47 UTC
    Hmm... Well, derefrencing a hashref can be done in the way you showed up there, but it is perfectly valid to get a scalar back from a hashref this way as well:
    $scalar = $$hashref{key};
    and assigning into a hashref can be done in the same way:
    my $hashref = {}; $$hashref{key} = $scalar;
    Perhaps taking a look at References quick reference will sum it up nicely.

    Thanks,

    Scott
    Project coordinator of the Generic Model Organism Database Project

      Thanks,
      I noticed that a while after I wrote it. I guess I'm too used to using ->.. I think thats more readable than $$ ..
      C.

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (5)
As of 2014-12-28 13:05 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (181 votes), past polls