Thread Grundlegendere Fragen zu mehrdimensionalen Arrays (20 answers)
Opened by Sven_123 at 2010-06-01 15:26

Taulmarill
 2010-06-02 11:37
#137901 #137901
User since
2004-02-19
1750 Artikel
BenutzerIn

user image
Code (perl): (dl )
@a=((0,1),(2,3))

erzeugt einen Array mit (0,1,2,3). Wenn du zwei arrays haben willst, die in @a referenziert werden ginge das so:
Code (perl): (dl )
@a=([0,1],[2,3])

Eckige Klammern erzeugen hier eine Referenz auf einen anonymen Array.

Der Unterschied zwischen @{$c[0]}=@a; und $d[0]=\@a; liegen darin, dass bei dem ersten Beispiel der Inhalt von @a übergeben wird, beim zweiten wird eine Referenz auf @a übergeben. Beim ersten Beispiel ist das ziel ein anonymer Array dessen Referenz in $c[0] liegt und beim zweiten Beispiel ist das Ziel das erste Element von @d

Bei @e[0]=@a; übergibst du den Inhalt von @a an einen Array-Slice der aus dem ersten Element von @e besteht, daher wird das erste Element von @e mit dem ersten Element von @a gefüllt. Array-Slices sind Teile eines Arrays die immer Listenkontext erzeugen. Du kannst z.B. auch mit @foo[0,1] = @foo[1,0] die ersten beiden Elemente von @foo tauschen. Einzelne Elemente eines Arrays spricht man in der Regel so an $e[0]=@a;, damit wird scalarer Kontext erzeugt und $e[0] auf die Anzahl der Elemente von @a gesetzt.

Btw. sei vorsichtig bei der Verwendung von Beispielvariablen. $a und $b haben z.b. besondere Bedeutung für perl. Eine Liste alle speziellen Variablen findest du unter Wiki:perlvar.
$_=unpack"B*",~pack"H*",$_ and y&1|0& |#&&print"$_\n"for@.=qw BFA2F7C39139F45F78
0A28104594444504400 0A2F107D54447DE7800 0A2110453444450500 73CF1045138445F4800 0
F3EF2044E3D17DE 8A08A0451412411 F3CF207DF41C79E 820A20451412414 83E93C4513D17D2B

View full thread Grundlegendere Fragen zu mehrdimensionalen Arrays