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

Sven_123
 2010-06-02 10:54
#137898 #137898
User since
2010-06-01
120 Artikel
BenutzerIn
[default_avatar]
Hab beide Links durchgelesen, noch ein bisschen in das "Lamabuch" (so sagt mir Wiki) geguckt und hab die Referenzen etc. denke ich verstanden. (Zumindest hab ich's hinbekommen einen Hash zu bauen, der ne vorher erstellte Referenz auf einen Array als Wert benutzt...juchuu ;)

Ein paar Fragen sind dennoch geblieben, oder eher neu gekommen:
So wie ich es verstanden habe, gibt es keine wirklichen mehrdimensionalen Arrays, sondern nur (wie bei den Hashes, wo ich es explizit so gelesen habe) Arrays von Referenzen auf Arrays. Zumindest erzeugt mir ja ein
Code: (dl )
1
2
3
4
@a=((0,1),(2,3)) nur ein 
(0,1,2,3) und nicht
0 2
1 3 .

Nun habe ich folgende Fälle:
Code: (dl )
1
2
3
4
@a=(0,1); @b=(2,3);
@{$c[0]}=@a; @{$c[1]}=@b;
$d[0]=\@a; $d[1]=\@b;
@e[0]=@a; @e[1]=@b;

Edit: Ich glaub ich hab mir den ersten Teil grad selbst beantwortet - es muss ein anonymer Array erzeugt werden, weil man ja eigentlich nur den Inhalt von @a übernehmen will, keine explizite Referenz darauf geben möchte. Letzteres würde eine Änderung von $c[0] auch bei einer nachträglichen Änderung von @a bewirken...(oder?)
Zeile 2: An der Position c[0] kann nur ein Skalarer Wert stehen. Durch @{} sag ich ihm aber, er soll das was drinnen steht als Array betrachten, im Fall einer Referenz (macht das für andere Dinge überhaupt Sinn?) diese also "öffnen". Die einzige Möglichkeit die Gleichung sinnvoll zu interpretieren ist also dem Wert c[0] eine Referenz zuzuordnen, die auf den Array @a zeigt, so wie in Zeile 3. Das wird aber anscheinend nicht ganz getan. Der Inhalt von @c und @d ist zwar der gleiche, aber während "print $d[0].\@a;" zweimal den gleichen Arraynamen auswirft, sind es bei "print $c[0].\@a;" unterschiedliche. Wieso?

Und etwas wichtiger, was geschieht bei Zeile 4? Die möglichen Ergebnisse an die ich dachte waren: Entweder, Perl richtet sich nach dem @a und behandelt beides im Listenkontext, wie in Zeile 2. Oder, wahrscheinlicher, Perl behandelt beides im Skalaren Kontext (der für @a sinnvoller ist, als ein Listenkontext für @e[0]) und weist @e[0] entweder eine 2 (die Anzahl der Elemente in @a), oder den Arraynamen zu. (Wann was im "skalaren Zusammenhang" genommen wird, ist mir noch nicht ganz klar - Skalare sind ja aufjedenfall beide.) Das Ergebnis ist jedoch ein @e, das einem (0,2), also den jeweils ersten Elementen aus @a und @b entspricht. Wie kommt das zustande?
Last edited: 2010-06-02 11:03:11 +0200 (CEST)

View full thread Grundlegendere Fragen zu mehrdimensionalen Arrays