Beefy Boxes and Bandwidth Generously Provided by pair Networks
Think about Loose Coupling

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

by kp2a (Sexton)
on Sep 28, 2008 at 18:33 UTC ( #714205=note: print w/replies, xml ) Need Help??

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

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;

Replies are listed 'Best First'.
Re^3: Can't use string ("0") as a HASH ref
by Corion (Pope) on Sep 28, 2008 at 18:46 UTC

    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!
        If, after use warnings; and use strict; at the top of your script, you were to add use diagnostics;, you would get more verbose, and in this case possibly more enlightening, warning nessages.

        For this particular problem, the greater verbosity may not have been greatly helpful because the source of the problem (generating a '0' instead of a reference and not checking it) is far removed both lexically and executionally from the point of failure.

Re^3: Can't use string ("0") as a HASH ref
by pjotrik (Friar) on Sep 28, 2008 at 22:36 UTC
    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://714205]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (4)
As of 2018-03-18 01:24 GMT
Find Nodes?
    Voting Booth?
    When I think of a mole I think of:

    Results (228 votes). Check out past polls.