Thread Array in Hash ? (3 answers)
Opened by jan99 at 2011-06-14 08:42

Sven_123
 2011-06-14 09:11
#149583 #149583
User since
2010-06-01
120 Artikel
BenutzerIn
[default_avatar]
Edit: Bin zu langsam...ersten Satz ignorieren. ;)
qw erzeugt eine Liste - [qw/1 2 3/] geht also ebenfalls.

Der Hintergrund ist, dass sowohl in Arrays, als auch in Hashes, direkt nur Skalare gespeichert werden können. Um einem Element trotzdem einen Array zuzuweisen, speichert man einfach eine Referenz auf einen bestimmten Speicherplatz, in dem dann der Array steht. Z.B.:

Code (perl): (dl )
1
2
3
4
5
@array = qw/a b c/;
$arrayref = \@array; #\ erzeugt Referenzen auf das was danach kommt
print "$arrayref\n"; #Da steht dann sowas wie ARRAY(0xae7d48)
print @{$arrayref},"\n"; #Dereferenziert wieder
%hash = (x => 1; y => $arrayref);


Da dieses Beispiel erstens umständlich ist, und außerdem nachträgliche Änderungen in @array auch in deinem Hash auftauchen würden, da man genau auf diesen Array verweist, was aber meistens ungewollt ist, bedient man sich der eckigen Klammern, die in einem Schritt aus einer Liste eine Arraysreferenz erzeugen.
Last edited: 2011-06-14 09:13:01 +0200 (CEST)

View full thread Array in Hash ?