Thread Verständnisfrage Datentypen (Array/Hash/literale "Listen") (29 answers)
Opened by tschloss at 2008-11-29 13:20

betterworld
 2008-12-02 04:53
#116778 #116778
User since
2003-08-21
2614 Artikel
ModeratorIn

user image
LanX-+2008-12-02 00:50:46--
les dir mal die Diskussion durch

Liiiiiiiiiiiiiiiiiies! ;-)
Quote
ob ($a) eine einelementige Liste beschreibt http://perlmonks.org/index.pl?node_id=726890


($a) ist eben nicht immer eine Liste. An vielen Stellen ist es auch einfach nur ein Skalar:
Code: (dl )
1
2
3
4
scalar(($a));
($a)*(1+2);
($a)->();
$scalar = ($a)x42;

In keinem der obigen Fälle ist $a im Listenkontext. Das kann man auch experimentell herausfinden, wenn man $a durch etwas ersetzt wie etwa einen Aufruf einer Funktion, die wantarray ausgibt.

In anderen Fällen ist es im Listenkontext:
Code: (dl )
1
2
3
($a)[0];
($a)=(0);
@array = ($a)x42;


Der Schluss daraus ist, dass es eben immer vom jeweiligen "Konstrukt" abhängt, ob die Klammern eine Extra-Bedeutung haben. Da Klammern intuitiv ein bisschen nach Liste aussehen, haben sie in den obigen Konstrukten eben die Sonderbedeutung, dass sie eine Liste (oder einen Listenkontext) erzeugen. Und ob man nun "Konstrukt" oder "Opcode" sagt, das kommt wohl in diesen Fällen aufs selbe hinaus. "Konstrukt" wäre etwas abstrakter (soll heißen: Mehr auf Perl-Niveau als auf C-Niveau), und ich gebe Dir recht, dass es, um über eine Sprache zu reden, angemessener ist, abstrakte Beschreibungen zu geben, solange sie zutreffen.

edit: noch das "@array = " zu dem Beispiel mit dem x-Operator dazugeschrieben, denn das ist auch wichtig, dass das ganze im Listenkontext steht

View full thread Verständnisfrage Datentypen (Array/Hash/literale "Listen")