perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5597
davon online: 1
weitere User: 1
Click for quality!



17.01.2018 / 16:06

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Hashes (Assoziative Arrays)

Normale Arrays oder Listen erlauben den Zugriff zu den Elementen über die Elementnummern. Das erste Element des Arrays @food ist $food[0]. Das zweite Element ist $food[1], und so weiter. Mit Perl können aber auch Arrays erzeugt werden, deren Elemente durch Strings referenziert werden. Diese Arrays nennt man assoziative Arrays oder hashes (die keyword - value -Paare werden in Hash-Tabellen abgelegt.)

Um einen Hash zu definieren verwenden wir die normale Klammer-Notation. Der Arrayname hat jedoch ein vorangestelles %-Zeichen (im Gegensatz zum @-Zeichen des gewöhnlichen Arrays). Wir wollen einen Hash definieren, welcher den Namen und das Alter von Personen enthält. Das sieht folgendermassen aus:

%ages = ('Michael Caine', 39,
         'Dirty Den', 34,
         'Angie', 27,
         'Willy', '21 in dog years',
         'The Queen Mother', 108);

Beachte: In Perl V5 können die Kommas durch => -Operator ersetzt werden. Damit wird die Zusammengehörigkeit der Schlüssel-Wert-Paare dokumentiert und er bewirkt, dass der Wert links des Operators als String interpretiert wird. Obiges kann deshalb auch folgendermassen geschrieben werden:

%ages = ('Michael Caine' => 39,
         'Dirty Den' => 34,
         Angie => 27,
         Willy => '21 in dog years',
         'The Queen Mother', 108);

Das Alter der Leute kann mit den folgenden Anweisungen gefunden werden:

$ages{'Michael Caine'};         # Ergibt 39
$ages{'Dirty Den'};             # Ergibt 34
$ages{Angie};                   # Ergibt 27
$ages{Willy};                   # Ergibt "21 in dog years"
$ages{'The Queen Mother'};      # Ergibt 108

Und mit

$ages{'ich'} = 'jung';

kann man beliebige weitere Elemente hinzufügen.

Das %-Zeichen wird wiederum durch ein $-Zeichen ersetzt, falls ein einzelnes Element gemeint ist. Ein Element ist ein Skalar! Im Unterschied zu den normalen Arrays, wo der Index in eckigen Klammern geschrieben wird, verwenden wir bei den Hashes die geschweiften Klammern. Der Index ist ein String, eben der Name der Person.

Ein Hash kann in einen normalen Array umgewandelt werden, indem er einfach einem normalen Array zugewiesen wird. Umgekehrt wird ein normaler Array in einen Hash umgewandelt. Idealerweise hat der normale Array eine gerade Anzahl Elemente:

@info = %ages;          # @info ist ein normaler Array.
                        # Er hat jetzt 10 Elemente.
$info[5];               # Das 5. Element von @info
                        # den Wert 27
%moreages = @info;      # %moreages ist ein assoziativer
                        # Array. Es ist der gleiche wie %ages

Operatoren

Die Elemente von assoziative Arrays sind ungeordnet (hash-tables) aber man kann die Elemente der Reihe nach mit den Funktionen keys und values zugreifen:

foreach $person (keys %ages)
{
        print "Ich kenne das Alter von $person.\n";
}
foreach $age (values %ages)
{
        print "Jemand ist $age Jahre alt.\n";
}

Die Funktion keys erzeugt ein Liste der Schlüsselwörter (das sind die Indizes) des Hash. Die Funktion values erzeugt ein Liste der Werte. Die Reihenfolge der beiden Listen ist gleich, sie hat jedoch nichts mit der Reihenfolge der Eingabe zu tun.
In skalarem Kontext geben die Funktionen keys und values die Anzahl key/value-Paare im assoziativen Array an.

Daneben gibt es noch eine Funktion each, welche einen Array mit zwei Elementen erzeugt, dem Schlüsselwort und dem Wert. Aufeinanderfolgende Aufrufe von each geben immer ein neues key/value-Paar aus, solange solche vorhanden sind:

while (($person, $age) = each(%ages))
{
        print "$person ist $age Jahre alt\n";
}

Umgebungs-Variablen

UNIX kennt das Konzept von Umgebungsvariablen, welche es erlauben, Informationen über das System interessierten Programmen weiterzugeben. Zum Beispiel wird in der USER-Variablen den Namen des eingeloggten Benutzers gespeichert und in der HOME-Variablen dessen Home-Directory, usf. Perl stellt diese Variablen in dem assoziativen Array %ENV zur Verfügung. Die Schlüsselwörter dieses Arrays sind die Namen der Umgebungsvariablen. Somit wird das folgende Programmstück die aktuellen Werte der Umgebungsvariablen USER und HOME ausgeben:

print "Du bist User $ENV{'USER'} mit ";
print "Homedirectory $ENV{'HOME'}\n";


zurück Inhalt weiter






-
-