IT-Academy Logo
Sign Up Login Help
Home - Programmieren - Perl - while loops in Perl selbst gemacht



while loops in Perl selbst gemacht

Einfache while Schleifen zum zählen und lesen von stdin werden erklärt.


Autor: Franz Schaefer (mond)
Datum: 20-02-2002, 18:18:21
Referenzen: man perlsyn
Schwierigkeit: Anfänger
Ansichten: 5137x
Rating: Bisher keine Bewertung.

Hinweis:

Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich.
Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren.

[Druckansicht] [Als E-Mail senden] [Kommentar verfassen]



Übersicht

wir sezten unsere kurzeinfuehrung in perl heute mit einfachen schleifen
fort. am besten gleich an einem beispiel:

#!/usr/bin/perl -w

$zaehler=1;

while ( $zaehler < 7 ) {
print "der wert der variablen zaehler ist $zaehler\n" ;
$zaehler = $zaehler + 1 ;
sleep(1);
}

wenn wir obiges programm ausfuehren (auf chmod ugo+rx nicht vergessen)
dann gibt es 6 zeilen aus. der teil in der eckigen klammer hinter dem
while () wird solange durchlaufen solange die bedingung in der runden
klammer erfuellt ist. anstatt: $zaehler=$zaehler+1 koennten wir auch

$zaehler++;

schreiben. das ist eine abgekuerzte schreibweise fuer $zaehler=$zaehler+1
ist praktisch weil man oft variablen um 1 erhoehen muss. (C programmierer
kennen das schon)

das sleep(1); schlaeft eine sekunde. ich hab das eingebaut damit das
ganze nicht so schnell durchlaueft.

weil das ganze so einfach war gleich noch ein beispiel:

#!/usr/bin/perl -w
while( ) {
chomp ;
print "die gelesene zeile war: $_\n" ;
}


obiges programm ist ein filter das werte von STDIN liest und nacht
STDOUT schreibt. der ausdruck liest jeweils eine zeile aus dem
"file" STDIN und speichert es in der speziellen variable $_.

der ausdruck ist solange wahr solange noch zeilen da sind die man lesen
kann. haben wir obiges programm z.b. in dem file test.pl gespeichert so
erzeugt:


echo bla bla| ./test.pl

folgende ausgabe:

die gelesene zeile war: bla bla

interessant in obigem perl programm ist auch der "chomp" befehl. er
entfernt ein allfaelliges zeilende zeichen von $_. bei der ausgabe wir
das ohnehin wieder mit dem "\n" hinten angefuegt.

wollen wir jetzt z.b. ein programm schreiben dass alle zeilen mit einer
zeilennummern voran ausgibt so wuerde das so aussehn:

#!/usr/bin/perl -w
$znr=1;
while( ) {
chomp ;
print "$znr: $_\n" ;
$znr++;
}

zu beachten: wir verwenden hier wieder die moeglichkeit von perl dass
variablen in einen string hineinsubstituiert werden. in weniger
fortgeschrittenen programmiersparchen muessten wir das anders machen. man
kann es aber auch in perl anders machen:

print $znr , ": " , $_ , "\n" ;

oben wird print mit mehreren argumenten hintereinadner aufgerufen die mit
beistrich getrennt sind. beim ausgeben fuegt es alle hintereinadner
zusammen. kennen wir ja schon aus der ersten perl lektion.

so zum abschluss noch 2 andere arten wie man schleifen machen kann.
anstatt while verwenden (vorallem alte C programmierer) gerne eine for
schleife:

#!/usr/bin/perl -w
for ( $alter=10 ; $alter > 0 ; $alter-- ) {
print "der wert der variablen alter ist " , $alter , "\n" ;
sleep(1);
}

eine vorschleife hat in der runden klammer (), wo die while schleife nur
eine bedingung hat, 3 teile die mit ; getrennt sind.

* der erste teil (oben $alter=10) wird nur einmal am beginn der
for-schleife ausgefuehrt.

* der mittlere teil ist wie in der while schleife die bedingung die
abgeprueft wird und die erfuellt sein muss damit die schleife weiter
ausgefuehrt wird.

* der letzte teil wird nach jedem schleifen durchlauf ausgefuehrt (ist
also wie wenn er oben nach dem sleep(1) stehen wuerde)

obige for schleife erniedrigt den wert von $alter mit dem $alter--
ausdurck. der macht wie man es nicht anders erwartet das selbe wie:
$alter=$alter-1;

zum schluss noch eine andere art schleifen zu schreiben:

#!/usr/bin/perl -w
$bla=0;
do {
print "bla ist " , $bla , "\n" ;
$bla++;
} until ($bla > 10);

die do { } until () schleife wird mindestens einmal ausgefuehrt und nach
jeder ausfuerhung wird geprueft ob die until bedingugn erfuellt ist. falls
die erfuellt ist wird die schleife nicht mehr ausgefuehrt.

EXERCISES:

* schreibe ein kurzes perl script das eine tabelle mit 13 zeilen mit den
faktoriellen von 1 bis 13 ausgibt.. (die faktorielle von 5 ist z.b:
1*2*3*4*5 = 120)

* schreibe ein kurzes perl script dass zeilen von stdin liest und das
am ende jeder zeile ein rufzeichen anfuegt.

_______________________________________________
CD ist ein service von SILVER SERVER
der inhalt unterliegt der GFDL
_______________________________________________



[back to top]



Userdaten
User nicht eingeloggt

Gesamtranking
Werbung
Datenbankstand
Autoren:04511
Artikel:00815
Glossar:04116
News:13565
Userbeiträge:16552
Queueeinträge:06248
News Umfrage
Ihre Anforderungen an ein Online-Zeiterfassungs-Produkt?
Mobile Nutzung möglich (Ipone, Android)
Externe API Schnittstelle/Plugins dritter
Zeiterfassung meiner Mitarbeiter
Exportieren in CSV/XLS
Siehe Kommentar



[Results] | [Archiv] Votes: 1158
Comments: 0