Thread hash undef bei erstem Aufruf in while()?!: perplex
(2 answers)
Opened by dukeofnukem at 2007-05-21 19:24
Alohá!
Folgender Auszug aus einem selbstgebasteltem XML-Differ: Code: (dl
)
1 sub pro { Hoffe das ist nicht zu unübersichtlich; habe der Vollständigkeit halber die ganze sub reingepackt. Der Knackpunkt: Wenn ich in attr die namedNodeMap %$map nicht vor der while-Schleife benutze (my @tmp = %$map;), ist %$map genau bei jedem zweiten Aufruf von attr mit der selben $node leer, bzw. es wird kein Attribut zurückgegeben! So lange ich jedoch irgendeine operation auf %$map ausführe, wird immer das Attribut zurückgeliefert. Zur Erklärung: XML::DOM::Node getAttributes A NamedNodeMap containing the attributes (Attr nodes) of this node (if it is an Element) or undef otherwise. [...] ############## XML::DOM::Attr getValue On retrieval, the value of the attribute is returned as a string. Character and general entity references are replaced with their values. ############## XML::DOM::NamedNodeMap - A hash table interface for XML::DOM DESCRIPTION ^ Objects implementing the NamedNodeMap interface are used to represent collections of nodes that can be accessed by name. [...] Faszinierend, aber nervig. Interessanterweise funktioniert Code: (dl
)
1 sub attr { Zugegebenermaßen nutzt diese Variante die API von XML::DOM sehr viel sauberer (wobei das next unless immer noch nötig ist, sonst knallts mit der objectref), aber es hat mich doch etwas stutzig gemacht... Hat dieser Aussetzer bei jedem zweiten Aufruf bei der ersten Variante was mit AUTOLOAD oder autovivification zu tun? Klappt ja jetzt, aber mich würde interessieren woran es liegt, daß genau jeder zweite Aufruf scheitert wenn der hash nicht vorher "benutzt" wurde. TIA! drum&bass is a state of mind
|