Beefy Boxes and Bandwidth Generously Provided by pair Networks
more useful options
 
PerlMonks  

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 +sysinfo.pm line 109.
my debug out
100 getsnmp result 101 .1.3.6.1.2.1.1.1.0=>"router" 107 sysDescr=>"router" $$myresult{sysDescr}=router; 115 return 116 sysDescr=>router 100 getsnmp result 101 .1.3.6.1.4.1.14988.1.1.1.1.1.5.3=>"BroadbandVI_5PrNE" 101 .1.3.6.1.2.1.1.5.0=>"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 +sysinfo.pm 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 scan.ackley.net 2.6.23.9-85.fc8 #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:

Comment on Can't use string ("0") as a HASH ref
Select or Download Code
Re: Can't use string ("0") as a HASH ref
by FunkyMonk (Canon) 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 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 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?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (12)
As of 2014-10-22 09:38 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    For retirement, I am banking on:










    Results (114 votes), past polls