Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
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: (14)
As of 2015-07-02 08:57 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (31 votes), past polls