> Das kann ja nicht sein, wenn Du %Personen als assoziatives Arry definierst,
> es aber hinterher mit der Syntax eines Scalars "$Personen" drauf zugreifst.
Vielleicht erklär ich's ja falsch, ich hoffe nicht.
Beispiel:
Code: Alles auswählen
my $sprache="Deutsch";
my @sprachen=("Perl", "PureBasic", "PHP")
my %einstufen=("Perl" => "mach ich gern",
"PureBasic" => "mach ich am liebsten",
"PowerBasic" => "kenne ich nicht");
print $sprachen; # ergibt Deutsch
print $sprachen[2]; # ergibt PHP (null-basierte Indizierung!)
print $sprachen{"PowerBasic"}; # ergibt kenne ich nicht
Sobald der Interpreter hinter dem Namen [ZAHL] oder {WORT} oder nix findet, weiß er, um was es sich handelt, Zahl wäre Array, Wort wäre Hash, nix wär eben der einfache Skalar (Variable).
Das $-Zeichen ist dabei immer Bestandteil der/des Variable/Arrays/Hashs, wenn man Werte auslesen oder speichern will. Die Zeichen $ @ % spielen nur bei der Deklaration eine Rolle.
Aus meinem Perl-Buch:
Perl Buch hat geschrieben:$emails - weist auf den Inhalt einre Variablen mit Namen "emails" hin
@emails - weist auf den Inhalt eines Arrays mit Namen "emails" hin [@emails einer Variablen zugewiesen gibt dann die Länge des Arrays zurück]
$emails[index] - weist auf den Wert mit dem Index "index" des Arrays "emails" hin
%emails - weist auf den Inhalt des Hashes mit Namen "emails" hin
$emails{key} - weist auf den Wert mit dem Schlüssel "key" des Hashes "emails" hin
Ich hoffe, ich konnte es dir verständlicher machen.
In PB ist es Vergleichbar:
Code: Alles auswählen
Define Alter ; Define entspricht dem $ bei der Deklaration
Dim Alter.l(10) ; Dim entspricht dem @ bei der Deklaration
NewList Alter.l() ; NewList könnte am ehesten mit % verglichen werden
; zugreifen tust doch jedoch auf alle drei Teile immer mit dem selben Präfix "" (nichts), in Perl lautet der Präfix eben "$" (Dollar)
; Das heißt: PureBasic erkennt anhand der "Anhängsel" (Zahl, Klammer, nix)
; ob es sich um eine Variable, Array oder Liste handelt:
Alter=42 ; Variable
Alter(4)=51 ; (4) deutet auf Array hin
AddElement(Alter())
Alter()=72 ; () weist auf eine LinkedList hin
> Fred ja seid 2003 implementieren
Wann das wohl sein wird?
> externe Libs
Darüber gabs im engl. Forum eine Diskussion, warum es beispielsweise CountArrayElements() nativ geben sollte, oder warum man es sich selber coden soll.
Gegner: Muss man sich halt selber coden
Befürworter: Gewissheit, dass der Befehl auf in der nächsten Version gleich funzt / anfängerfreundlicher / es gibt keine Fehlerrisiken, wenn Fred es proggt (eigene Versionen können fehelrhaft sein)
Ich gehlre zu den Befürwortern.