Hallo,
ich bin auf der Suche nach der Ursache für ein kleines aber fieses Perl-Problem. Die auf das Nötigste reduzierte Aufgabe besteht darin, Referenzen zu Listen in einem Hash abzuspeichern. Ich erzeuge also erstmal alle Strukturen:
%a = ();
@b = ('b'); @c = ('c');
$a{"x"} = @b; $a{"y"} = @c;
Der Wert zum Schlüssel x zeigt jetzt also auf eine Liste mit dem Element b, und der zum Schlüssel y auf eine Liste die c enthält.
Jetzt hole ich mir die Liste für den Schlüssel x und weise sie unverändert wieder zu:
@list = @{$a{"x"}}; $a{"x"} = @list;
Es hat sich nichts geändert, und so soll das auch sein. Jetzt probiere ich das mal mit y:
@list = @{$a{"y"}}; $a{"y"} = @list;
Und plötzlich zeigen sowohl x als auch y auf die Liste mit c. Welche irdische Erklärung kann es dafür geben?
Zum Anzeigen nehm ich folgende Routine:
foreach $key(keys(%a)){ print "Keys for $key:\n"; @list = @{$a{$key}}; foreach $value(@list){ print "* Value is $value\n"; } }
Josef Spillner