Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re: Can't use string ("0") as a HASH ref

by Corion (Pope)
on Sep 28, 2008 at 16:07 UTC ( #714187=note: print w/replies, xml ) Need Help??

in reply to Can't use string ("0") as a HASH ref

From the code you're not showing us, I can't make out any reason either. Most likely, somewhere in the code you keep well concealed from our prying eyes, you do the moral equivalent of:

my $foo = '0'; print $foo->{bar};

Maybe you want to show more relevant and coherent code, and tell us what is debug output and what is code?

Replies are listed 'Best First'.
Re^2: Can't use string ("0") as a HASH ref
by kp2a (Sexton) on Sep 28, 2008 at 18:33 UTC
    Sorry - I had hope that the error message might mean something!
    global %$r is a reverse lookup OID number to text
    hash keys and values guaranteed no white spaces
    here is the code - redundant,
    mangled to try to find the error!
    91 sub getsnmp { 92 my $session = shift; 93 my $oids = shift; 94 my $myresult = shift; 95 my $debug = shift; 96 97 my $result = $session->get_request( -varbindlist => $oids); 98 if($result) { 99 if($debug) { 100 printf "%4d getsnmp result\n",__LINE__ ; 101 printf "%4d $_=>\"$$result{$_}\"\n",__LINE__ for (keys + %$result); 102 } 103 for $key (keys %$result) { 104 my $value = $$result{$key}; 105 $key =~ s/\.\d+$//; ### strip off index at end of stri +ng 106 my $rkey = $r{$key} or die "bad $key\n"; 107 printf "%4d $rkey=>\"$value\"\n",__LINE__ if $debug; 108 print " \$\$myresult{$rkey}=$value;\n "; 109 $$myresult{$rkey} = $value; 110 } 111 } else { 112 return $myresult; 113 } 114 if($debug) { 115 printf "%4d return\n",__LINE__; 116 for(keys (%$myresult) ) { printf "%4d $_=>$$myresult{$_}\n +",__LINE__} 117 } 118 return $myresult; 119 } 120 1;

      Somewhere (and Perl says in line 109), your data structure is not what you think it is. Use Data::Dumper to get a view of your data structure:

      use Data::Dumper; warn Dumper $result;

      If the line numbers you posted still match up with the error messages you posted in your first post, then the error is in the following line:

      $$myresult{$rkey} = $value;

      So you best inspect all three values you have. Most likely, $myresult is 0 instead of whatever you expect:

      warn "Parameters on subroutine entry:"; warn Dumper \@_; warn Dumper $myresult;

        Thanks tip "use Data::Dumper;"
        you are correct: my problem was wrong parameters in the call to the subroutine!
        the code although mangled in an attempt to find the error is correct!
        wish the error messages were a little more enlighting!
      Looks like the module you use to obtain $myresult returns "0" in the case of error and you don't check whether the call was successful

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://714187]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2017-04-27 03:04 GMT
Find Nodes?
    Voting Booth?
    I'm a fool:

    Results (498 votes). Check out past polls.