|
![ein Kapitel weiter](../weiter.gif)
Nachdem wir uns bisher nur mit den skalaren Variablen beschäftigt haben kommen wir
nun zu den Arrays. Viele die bereits Erfahrung mit z.B. C gemacht haben werden so
manche Überraschungen erleben. Nach diesem Kapitel werden wohl die letzten Zweifel
beseitigt sein das Perl unumstritten die beste Programmiersprache darstellt wenn es um Text geht.
Gerade Programmierer die in C/C++ programmieren werden einige Verständnisprobleme bekommen. Warum? Weil es oftmals zu einfach ist ;)
Wo man in anderen Sprache eigene Routinen schreiben muss geht in Perl mit gerade einer Zeile. Selbst ich musste zu Beginn manche Abschnitte zweimal Lesen weil ich es mir nicht vorstellen konnte das es so simpel ist.
Wollen wir mit den Arrays von Zahlen beginnen. C-Programmierer definieren die Werte Ihres Arrays etwas so......
int werte[9] = { 1,2,3,4,5,6,7,8,9,10 };
Anmerkung für Anfänger : Computer beginnen bei 0 zu zählen da der Wert 0
für den Computer ebenso ein Darstellbarer Wert ist. Daher der Index [9] und 10 Zahlen. 0-9 sind ja auch 10 Zahlen. Dies gilt auch für Perl!!!
In Perl hat die Definition eines Arrays mit Zahlen folgendes Aussehen..........
@werte = (1,2,3,4,5,6,7,8,9,10);
Natürlich kann man diese Schreibweise mit dem Bereichsoperator abkürzen......
@wert = (1..10);
Dies entspricht der selben Wertdefinition wie zuvor.
Jetzt wollen wir uns doch mal ansehen wie wir die einzelnen Werte der Liste durchgehen
können. Wenn sie einen einzelnen Wert in einem Array angeben wollen benötigen wir einen
Index der auch bei Perl in eckige Klammern steht. Außerdem muss wenn man ein
einzelnes Element der Liste ausgeben will das Präfix $ für Skalar an den Array-Namen hinzufügen. Hierzu nun ein Beispiel....
#!/usr/bin/perl -w
@werte = (1..20);
print "Es werden alle geraden Zahlen zwischen 1 und 20 ausgegeben\n";
for($i=1; $i < 20; $i++)
{
if($werte[$i]%2)
{
next;
}
print $werte[$i] , "\n";
}
Wir definieren hier ein Array mit den Wert 1-20, durchlaufen eine Schleife von 1-20
und überprüfen ob die Zahl von $wert[$i]%2 einen Rest ergibt. Falls ja wird mit
next wieder an dem Schleifenanfang gesprungen, falls kein Rest herauskommt ist es eine gerade Zahl und wir geben sie aus.
Also nochmals, wenn sie auf eine einzelnes Element in einem Array zugreifen wollen
müssen sie $ für Skalar eingeben und den Indexwert in viereckigen
Klammern.
Das ganze kann man natürlich auch mit der Standardvariable $_ bewältigen.......
#!/usr/bin/perl -w
@werte = (1..20);
$counter=0;
print "Es werden alle geraden Zahlen zwischen 1 und 20 ausgegeben\n";
foreach (@werte) #Das Array @werte wird durchlaufen
{
if($_%2) #Gerade Zahl?
{
next; #Nein
}
print $_ , "\n"; #Gerade Zahl ausgeben
$_ = $counter++; #Index des Arrays erhöhen
}
Nun kennen sie eine Möglichkeit wie sie Array durchlaufen können und auf einzelnen
Elemente zugreifen können. Wie kann man aber nun herausfinden wie viele Werte sich
tatsächlich in dem Array befinden? Sie werden überrascht sein...............
#!/usr/bin/perl -w
@werte = (11, 48, 23, 10, 33, 66);
$anzahl_werte = @werte;
print "\n", $anzahl_werte , "\n";
Und hierbei bekommen sie den Wert 6 zurück. Eine Weitere Möglichkeit stellt diese
da....
#!/usr/bin/perl -w
@werte = (11, 48, 23, 10, 33, 66);
print "\n", $#werte+1 , "\n"; #$#werte stellt den Index des letzten Wertes da
print $werte[$#werte], "\n"; #Hier der Beweis
Was sagt uns das nun wieder? Nun der höchste Index eines Array wird in der Variablen
$#werte festgehalten was uns die Ausgabe mittels....
print $werte[$#werte], "\n";
....auch beweist. Jetzt dürfte wohl auch klar sein wieso........
$anzahl_werte = @werte;
..die Anzahl der Elemente in dem Array zurückgibt. Intern kann man sich dies dann so
Vorstelle.............
$anzahl_werte = $#werte+1;
![ein Kapitel weiter](../weiter.gif)
© 2001,2002 Jürgen Wolf
|