ABSTRACT: perl: arrays werden vorgestellt. inklusive der funktionen push, pop, shift, unshift AUDIENCE: perl beginners SYSTEM: any unix SECTION: perl AUTHOR: mond COPYRIGHT: GNU Free Documentation Licence http://www.gnu.org/licenses/fdl.txt einfache perl variablen kenenn wir bereits heute lernen wir "arrays" weiters hat perl sehr viele funktionen zum manipulieren von textstrings eingebaut.. davon lernen wir heute "split" und "join" kennen. angenommen wir haben eine grosse zahl von daten die wir speichern wollen. wir koennten natuerlich $name1="bla"; $name2="bli"; ... $name20="blo"; machen. ist aber nicht gerade ideal. daten die wir ueber einen index ansprechen wollen fasst man am besten in ein array zusammen: z.b. folgendes programm: #!/usr/bin/perl -w @feld=(); $feld[2]="toni"; $feld[1]="anna"; $feld[3]="susi"; $feld[0]="karli"; push @feld,"franzi"; foreach $name (@feld) { print "name=$name\n"; } die @feld=(); definiert unser array und weisst als inhalt das leere array () zu. danach werden die 4 felder des array durch zuweisungen[B mit namen befuellt. der push befehl haengt an das ende des array noch einen wert an. (in diesem falle waere das equivalten mit $feld[5]="franzi".) man beachte: meint man das array als ganzes so schreibt man ein @ vor dem namen. meint man ein einzelnes feld so schreibt man $ und dahinter dann eckige klammernund in den ekigen klammern den index. die foreach schleife ist eine praktische methode wenn man ueber alle elemente eines arrays iteriren will. die foreach schleife weist der variablen $name alle werte aus dem array zu das in klammern dahinter steht. (gibt man bei foreach keine variable an der die werte zugewiesen werden sollen so wird dafuer $_ verwendet) will man bei einem array herausfinden wie hoch der index des letzten befuellten elements ist so kann man das mit dem ausdruch $#feld wir koennten also anstelle obiger foreach schleife auch eine for schleife machen und mitzaehlen: for($i=0 ; $i <= $#feld ; $i++) { print "der name ist " , $feld[$i] , "\n"; } wo push am ende eines arrays einen wert anfuegt nimmt die funktion pop einen weg: while ($k=pop @feld) { print "name ist $k\n"; } obige schleife gibt damit die namen in verkehrter reihenfolge aus und loescht das array weil pop ja die emlemente der reihe nach entfernt. der wert $k ist undefiniert sobald versucht wird vom leeren array nochmal etwas wegzu-pop-en und damit wird die whileschleife beendet. aehnlich wie pop arbeitet der befehl "shift" aber shift nimmt die elemente vom anfang des array weg. $name=shift @feld; weist der variablen $name den wert von $feld[0] zu und nummeriert das array um so das $feld[1] an die stelle von $feld[0] rueckt usw... das gegenteil zu shift ist "unshift". es fuegt einen wert am anfang des arrays ein und verschiebt alle werte um eins nach hinten. zum abschluss lesen wir alle zeilen von STDIN ein und geben sie in verkehrter reihenfolge versehen mit der index nummer wieder aus: #!/usr/bin/perl -w @a=(); while() { push @a,$_; } for($i=$#a ; $i >=0 ; $i-- ) { print "$i: ",$a[$i]; } man beachte: da wir kein chomp machen sind in den zeilen noch die \n mitabgespeichert und wir brauchen beim ausgeben auch kein zusaetzliches anfuegen. eleganter waere obiges programm natuerlich mit einer while schleife und einem pop. ausserdem koennte man den befehl: reverse verwenden der die reihenfolge in einem array umkehrt. @verkehrt=reverse @glatt; ein spezielles array ist das array mit dem namen @ARGV. es enthaelt alle parameter die dem programm beim aufruf uebergeben wurden. EXERCISES: * schreibe ein perl script das alle zeilen von STDIN in ein array einliest und danach wieder ausgibt. mach die ausgabeschleife einmal mit einem foreach, einmal mit einem for das ueber alle indexnummern laeuft und einmal mit einer while schleife die mit shift ein element nach dem anderen herunterliest. * schreibe ein perl script das alle parameter mit denen es aufgerufen wurde nacheinander ausgibt. REFERENCES: man perldata man perlfunc