Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

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

by kp2a (Sexton)
on Sep 28, 2008 at 16:03 UTC ( #714185=perlquestion: print w/replies, xml ) Need Help??
kp2a has asked for the wisdom of the Perl Monks concerning the following question:

Cannot see any reason for the following error message:
Can't use string ("0") as a HASH ref while "strict refs" in use at get line 109.
my debug out
100 getsnmp result 101 .>"router" 107 sysDescr=>"router" $$myresult{sysDescr}=router; 115 return 116 sysDescr=>router 100 getsnmp result 101 .>"BroadbandVI_5PrNE" 101 .>"A" 107 mtssid=>"BroadbandVI_5PrNE" $$myresult{mtssid}=BroadbandVI_5PrNE; Can't use string ("0") as a HASH ref while "strict refs" in use at get line 109.
Works OK several times, the fails later. The failed command printed at line 108 before execution line 109. Any ideas? Work around?
[john@scan ~]$ uname -a Linux #1 SMP Fri Dec 7 15:49:59 EST 20 +07 i686 i686 i386 GNU/Linux [john@scan ~]$ perl -V Summary of my perl5 (revision 5 version 8 subversion 8) configuration:

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

    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?

      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;
        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
Re: Can't use string ("0") as a HASH ref
by FunkyMonk (Chancellor) on Sep 28, 2008 at 16:07 UTC
    I think we need to see some code :(
Re: Can't use string ("0") as a HASH ref
by runrig (Abbot) on Sep 28, 2008 at 16:20 UTC
    Works OK several times,...

    It does? Wow, I can't get that to compile, let alone run, even without Use strict and warnings...what is it supposed to do?

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://714185]
Approved by ww
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (10)
As of 2018-10-18 16:08 GMT
Find Nodes?
    Voting Booth?
    When I need money for a bigger acquisition, I usually ...

    Results (102 votes). Check out past polls.