if any { !$snmp_ext_type{$_[0]} } values %$new_tree;

20/01/2010 - 11:19 von Helmut Schneider | Report spam
Moin,

kann mir jemand sagen, was obiges genau tut? Ich (denke zu sehen) sehe,
dass die Werte zweier Hashes verglichen wird, ich (denke gelesen zu
haben) las, dass es effizienter sei, als 'grep', aber im Detail?

Hintergund ist, ich spiel mit PassPersist [1][2] herum. Es gibt zwei
Funktionen, um Werte in OIDs anzulegen, add_oid_entry() und
add_oid_tree(). Wàhrend add_oid_entry() straight-forward ist, hab ich
mit add_oid_tree ziemlich Probleme. Ich legen den passenden
(funktionierenden) Hash folgendermassen an:

$$hash{$OID} = [ "integer" => 1 ];
[...]
$extsnmp->add_oid_tree($hash);

aus PassPersist.pm:

my %snmp_ext_type = (
counter => "counter",
gauge => "gauge",
integer => "integer",
ipaddr => "ipaddress",
ipaddress => "ipaddress",
netaddr => "ipaddress",
objectid => "objectid",
octetstr => "string",
# opaque => "opaque",
string => "string",
timeticks => "timeticks",
);

Und nun kommt in Zeile 232 besagte Stelle:

sub add_oid_tree {
my ($self, $new_tree) = @_;
croak "error: Unknown type"
if any { !$snmp_ext_type{$_[0]} } values %$new_tree;

Solange die nicht auskommentiert ist, knallt es:

# perl ./pf-stats-snmp.pl
fatal: An error occurred while executing the backend collecting
callback: error: Unknown type at ./pf-stats-snmp.pl line 162
at ./pf-stats-snmp.pl line 195
#

Ist sie auskommentiert, funktioniert alles pràchtig, und auch die OIDs
bekommen ihre Werte.

Danke und Gruß, Helmut

[1] http://search.cpan.org/dist/SNMP-Ex...ssPersist/
[2] Erst, wenn ich hier nicht weiter komme, hau ich den Author an.

No Swen today, my love has gone away
My mailbox stands for lorn, a symbol of the dawn
 

Lesen sie die antworten

#1 Frank Seitz
20/01/2010 - 11:46 | Warnen spam
Helmut Schneider wrote:

kann mir jemand sagen, was obiges genau tut? Ich (denke zu sehen) sehe,
dass die Werte zweier Hashes verglichen wird, ich (denke gelesen zu
haben) las, dass es effizienter sei, als 'grep', aber im Detail?



any vergleicht keine Hashes, sondern durchsucht ein
Array nach dem Vorkommen eines Elements. Es bricht im Gegensatz
zu grep nach dem ersten Treffer ab. Siehe perldoc Hash::Util.

Im konkreten Fall wird eine Liste von Typbezeichnern geprüft.
Wenn ein ungültiger Typbezeichner vorkommt,
wird eine Exception ausgelöst.

Grüße
Frank
Dipl.-Inform. Frank Seitz
Anwendungen für Ihr Internet und Intranet
Tel: 04103/180301; Fax: -02; Industriestr. 31, 22880 Wedel

Blog: http://www.fseitz.de/blog

Ähnliche fragen