in reply to Re: Multiple conditions matching when pulling OID value with Net::SNMP
in thread Multiple conditions matching when pulling OID value with Net::SNMP

As a side note, I changed the loop to:
my @values = values (%$result); foreach my $key (@values) { print "key:$key\n"; $status = $key; } print "status:$status\n";
When I turn on strict I get:
Global symbol "$status" requires explicit package name at C:\SNMP.pl l +ine 21. Global symbol "$status" requires explicit package name at C:\SNMP.pl l +ine 24. Global symbol "$status" requires explicit package name at C:\SNMP.pl l +ine 26. Global symbol "$status" requires explicit package name at C:\SNMP.pl l +ine 30. Execution of C:\SNMP.pl aborted due to compilation errors.
How do I define $status to be used outside of the loop and not get the above errors?

Replies are listed 'Best First'.
Re^3: Multiple conditions matching when pulling OID value with Net::SNMP
by chargrill (Parson) on Oct 20, 2006 at 19:08 UTC

    Simplest way:

    my $status; my @values = values (%$result); foreach my $key (@values) { print "key:$key\n"; $status = $key; }

    However, now that I take another look at it, I also notice that you're only ending up with a single value in $status, and that's whatever came last in your @values or %Sresult hashref. Is this intentional? If so, you could just re-write it like so:

    my $status = ( keys %$results )[ -1 ];

    This is untested, but ought to work. Basicaly it saves you from creating a superfluous array @values, treats keys %$result as a list, and [ -1 ] takes the last element of that list.

    And completely unrelated, but you may want to start indenting your code properly, as it can get hard to see scoping issues merely by eyeballing it. For instance, the following would've made this much more obvious to everyone else in the thread:

    my @values = values (%$result); foreach my $key (@values) { print "key:$key\n"; $status = $key; }


    --chargrill
    s**lil*; $*=join'',sort split q**; s;.*;grr; &&s+(.(.)).+$2$1+; $; = qq-$_-;s,.*,ahc,;$,.=chop for split q,,,reverse;print for($,,$;,$*,$/)