hi!
// $produkte{$name} = @produkte;
// $nr{$name} = @nr;
// $menge{$name} = @menge;
// u.s.w.
wieso geht das nicht, wie funktionierts wirklich??
Folgendes erstellt eine Referenz auf das Array @produkte:
$referenz = @produkte;
Diese Referenz ist wieder ein Skalar, kann also leicht in einer
anderen Liste oder einem Hash gespeichert werden:
$hash{$key} = $referenz;
Oder direkt:
$hash{$key} = @produkte;
Um die Referenz wieder zu de-referenzieren, musst du einfach vor das
$-Zeichen des Skalars $referenz schreiben, um was für einen Datentyp
es sich handelt:
$referenz = @produkte;
@produktliste = @{ $referenz };
Perl weiß dann, dass $referenz eine Referenz auf eine Liste ist. Es
speichert dann die referenzierte Liste in @produktliste.
Gleiches ist mit Hashes möglich:
$referenz = %hash;
%newhash = %{ $referenz };
Geht natürlich auch mit Skalaren, wobei es da etwas weniger sinnvoll
ist.
Jörk's Code ist lediglich eine andere Methode, auf die gespeicherten
Referenzen zuzugreifen. Wobei ich mich damit nicht so ganz auskenne,
aber vermutlich funktioniert das etwa so:
@liste = ("eins", "zwei", "drei");
$liste_ref = @liste;
$skalar = $liste_ref;
print $skalar->[0]; # -> eins
print $skalar->[1]; # -> zwei
...
Analoges bei Hashes:
%hash = ("eins" => "elf", "zwei" => "zwölf");
$hash_ref = %hash;
$skalar = $hash_ref;
print $skalar->{'eins'}; # -> elf
print $skalar->{'zwei'}; # -> zwölf
...
Ich hoffe, das war klar genug ausgedrückt. Weitere Infos gibt's mit:
perldoc perlref
bye, Frank!