Die Webseiten der Fachschaft Informatik am ERG Saalfeld
Listen erstellen, Zugriff auf Elemente und Listen-Operationen
Neben den Skalaren wie z.B. $x kennt Perl den Datentyp der Liste. In diesen Listen können
Strings genauso wie auch Zahlen abgelegt werden. Listen heißen z.B. @zeilen oder @namen ..., erkennbar sind
Listen am vorangestellten @.
Erstellen von Listen
Listen kann man z.B. erstellen (aber nicht nur!), indem man die Elemente angibt / aufzählt:
my @vornamen = ('anton', 'bert', 'caesar', 'detlef', 'emil'); # Inhalt der Liste sind 5 Strings
my @nachnamen = qw(kepler reinhold kopernikus brahe); # Inhalt sind 4 Strings, durch qw (quote word) können die Anführungsstriche und Kommas weggelassen werden
my @primzahlen = (2, 7, 5, 11, 17, 23, 3); # Inhalt sind 7 Zahlen
my @gemischte_liste = ('07318', 'saalfeld', 'am lerchenbuehl', 17); # hier sind Strings und Zahlen gemischt
my @leere_liste = (); # eine Liste ohne Elemente, also leer (Anzahl der Elemente ist 0)
my @undef_list; # die Liste ist nicht definiert, die Anzahl der Elemente ist 0
Zugriff auf die Listenelemente
Die Listenelemente werden der Reihe nach "durchnummeriert", wobei aber bei der Nummerierung mit 0 begonnen wird.
D.h. in der Liste @vornamen ist 'anton' das 0. Element, 'bert' das 1. Element, 'caesar' das zweite Element usw.
Das schreibt man so:
$zweites = $vornamen[2];
Das bedeutet, aus der Liste @vornamen wird das 2. Element, also 'caesar' in die (Skalar-)Variable $zweites gesteckt.
Das bedeutet aber auch, der Zugriff auf ein Listenelement ist der Zugriff auf einen Skalar und damit ist $vornamen[2]
eben auch eine Skalarvariable und hat konsequenterweise das Dollarzeichen, "obwohl" es sich auf die Liste @vornamen bezieht.
Merke: Skalare haben immer das $-Zeichen, (nur) Listen haben immer das @-Zeichen!
Beispiele:
my @vornamen = ('anton', 'bert', 'caesar', 'detlef', 'emil');
my $zweites = $vornamen[2]; # in $zweites steckt jetzt 'caesar'
$vornamen[1] = 'boris'; # in der Liste sind jetzt 'anton', 'boris', 'caesar', 'detlef', 'emil'
$vornamen[0] = $zweites; # in der Liste sind jetzt 'caesar', 'boris', 'caesar', 'detlef', 'emil'
# wir geben die Liste aus, jedes Element in einer Zeile
foreach my $element (@vornamen) {
print $element, "\n";
}
my @nachnamen;
$nachnamen[0] = 'kepler';
$nachnamen[1] = 'reinhold';
$nachnamen[2] = 'kopernikus';
$nachnamen[3] = 'brahe'; # in der Liste sind jetzt 'kepler', 'reinhold', 'kopernikus', 'brahe'
$nachnamen[6] = 'regiomontanus'; # in der Liste sind jetzt 'kepler', 'reinhold', 'kopernikus', 'brahe', undef, undef, 'regiomontanus'
$nachnamen[2] = ''; # in der Liste sind jetzt 'kepler', 'reinhold', '', 'brahe', undef, undef, 'regiomontanus'
Anzahl der Listenelemente bestimmen
Wenn man eine Liste einer Skalarvariablen zuweist, dann steht in der Skalarvariablen die Anzahl der Listenelemente. Beispiel:
$anzahl = @nachnamen;
Auf das letzte Beispiel mit @nachnamen bezogen würde in $anzahl eine 7 stehen. So wird auch in der Literatur und auf
vielen Webseiten angegeben, dass man so die Anzahl ermittelt. Das geht aber nicht immer. Wenn man die Anzahl einer Liste direkt ausgeben will,
ohne erst eine zusätzliche Variable zu verwenden, dann geht das nicht mit print @nachnamen; (ausprobieren ;-) ), sondern
dafür gibt es die Anweisung skalar. Damit wäre Folgendes korrekt: print skalar @nachnamen;. Damit
empfehle ich wegen der besseren Lesbarkeit, die Anzahl der Listenelemente immer so zu bestimmen:
$anzahl = scalar @nachnamen;
Operationen mit Listen
- push = an eine Liste etwas anhängen
- pop = von einer Liste das letzte Element entfernen
- shift = von einer Liste das vorderste Element (0. Element) entfernen. Damit rutschen alle Elemente um eins nach vorn!
- unshift = einer Liste am Anfang (als 0.Element) hinzufügen. Damit rutschen alle Elemente um eins nach hinten!
- reverse = liefert eine Liste zurück, wobei die Reihenfolge vertauscht ist (das erste Element ist dann das letzte Element).
- splice = dient zum Entfernen, Hinzufügen und Austauschen von Teillisten - siehe Links.
Das folgende Programm soll die Nutzung der verschiedenen Operationen demonstrieren:
use strict;
use warnings;
my @liste1 = ('anton', 'bert', 'caesar', 'detlef', 'emil'); # in Liste1 sind jetzt 'anton', 'bert', 'caesar', 'detlef', 'emil'
push @liste1, 'fred'; # in Liste1 sind jetzt 'anton', 'bert', 'caesar', 'detlef', 'emil', 'fred'
my $person = 'ilse';
my @liste2 = ();
push @liste2, 'gerda', 'hans';
push @liste1, @liste2, $person; # in Liste1 sind jetzt 'anton', 'bert', 'caesar', 'detlef', 'emil', 'fred', 'gerda', 'hans', 'ilse'
pop @liste1; # in Liste1 sind jetzt 'anton', 'bert', 'caesar', 'detlef', 'emil', 'fred', 'gerda', 'hans'
$person = pop @liste1; # in Liste1 sind jetzt 'anton', 'bert', 'caesar', 'detlef', 'emil', 'fred', 'gerda'
@liste2 = reverse @liste1; # in Liste2 sind jetzt 'gerda', 'fred', 'emil', 'detlef', 'caesar', 'bert', 'anton'
@liste1 = @liste2; # in Liste1 sind jetzt 'gerda', 'fred', 'emil', 'detlef', 'caesar', 'bert', 'anton'
shift @liste1; # in Liste1 sind jetzt 'fred', 'emil', 'detlef', 'caesar', 'bert', 'anton'
shift @liste1; # in Liste1 sind jetzt 'emil', 'detlef', 'caesar', 'bert', 'anton'
push @liste1, $person; # in Liste1 sind jetzt 'emil', 'detlef', 'caesar', 'bert', 'anton', 'hans'
push @liste1, $person; # in Liste1 sind jetzt 'emil', 'detlef', 'caesar', 'bert', 'anton', 'hans', 'hans'
$person = shift @liste1; # in Liste1 sind jetzt 'detlef', 'caesar', 'bert', 'anton', 'hans', 'hans'
push @liste1, $person; # in Liste1 sind jetzt 'detlef', 'caesar', 'bert', 'anton', 'hans', 'hans', 'emil'
unshift @liste1, 'erasmus'; # in Liste1 sind jetzt 'erasmus', 'detlef', 'caesar', 'bert', 'anton', 'hans', 'hans', 'emil'
unshift @liste1, $person; # in Liste1 sind jetzt 'emil', 'erasmus', 'detlef', 'caesar', 'bert', 'anton', 'hans', 'hans', 'emil'
# Ausgabe 1
foreach my $element (@liste1) {
print $element, ' ';
}
print "\n";
# Ausgabe 2
print join(' ', @liste1);
print "\n";
__END__
Das sah dann bei mir so aus:
Aufgaben
- Bringen Sie das Programm zum Laufen.
- Ergänzen Sie das Programm, indem Sie die Anzahl der Listenelemente ausgeben lassen.
- Geben Sie das erste, das dritte und das letzte Element aus.
- Das 4. Element (also 'caesar') soll nun durch 'casimir' ersetzt werden. Geben Sie zur Kontrolle die Liste danach wieder aus.
- Worin unterscheiden sich die Ausgabe 1 und die Ausgabe 2? Falls Sie es nicht erkennen, ersetzen Sie jeweils das Leerzeichen durch einen Bindestrich und probieren es aus.
Weblinks
zurück
© ERG Saalfeld - Hans-Dietrich Kirmse letztes Update: 4.03.2015
|