Thread arrays erzeugen, mit namen aus anderem array
(12 answers)
Opened by landogar at 2005-10-26 10:50
[quote=landogar,28.10.2005, 14:26]ich hab jetzt ein zweidimensionales hash{1.dim}{2.dim}
ich befülle dieses jetzt mit werten: vereinfacht: hash{1.dim}{2.dim1}="wert"; hash{1.dim}{2.dim2}="wert"; hash{1.dim}{2.dim3}="wert"; hash{1.dim}{2.dim4}="wert"; wenn ich jetzt einen wert in der 1.dimension hinzufügen will hash{1.dim}="wert"; kommt mit use strict folgende fehlermeldung: Can't use string ("1") as a HASH ref while "strict refs" in use at... warum kann ich in der ersten ebene keinen wert mehr hinzufügen??[/quote] Ich nehme mal an, dass du versuchst, einen Wert in der zweiten Ebene hinzuzufuegen, nachdem du einen Wert in der ersten Ebene skalar gesetzt hast. Also sowas: Die letzte Zeile gibt einen Fehler "Can't use string ("42") as a HASH ref while "strict refs" in use ...". Warum? Weil ein $hash{foo}{bar} verlangt, dass $hash{foo} eine Hashreferenz ist! $hash{foo} kann aber nur eines von beidem sein: entweder ein Skalar (42) oder eine Hashreferenz ({ bar => 23 }). Wenn man aber selber schon $hash{foo} mit 42 gefuellt hat, dann versucht Perl so etwas wie 42->{bar} = 23 zu interpretieren, und das geht schief. Wenn man die letzte Zeile vor der vorletzten ausfuehrt, gibt es keine Fehlermeldung, weil Perl so schlau ist, automatisch in $hash{foo} eine Referenz auf { bar => 23 } anzulegen (Das nennt sich "autovivification"). Anschliessend wuerde durch das $hash{foo} = 42; diese Referenz einfach wieder geloescht und das { bar => 23 } verloren gehen. Merke: Ein Hash kann fuer einen Schluessel immer nur einen Wert haben - entweder einen Skalar oder eine Referenz.* PS: Dein Beispiel mit diesem "1.dim" war uebrigens ein schlechtes, weil "1.dim" kein gueltiges Bareword ist und damit als Schluessel in einem Hash in Anfuehrungszeichen stehen muesste. * Ja, okay, oder ein Filehandle, einen Typeglob, ein Format ... |