::Tips & Tricks / Verschiedenes / Perl / 4. Flußkontrolle Seite drucken
  der verein   projekte   veranstaltungen   hilfestellung   tips & tricks   fun   
 
  
  grundsätzliches
  
  fenstermanager
  
  web, mail & news
  
  multimedia
  
  novell/suse
  
  gentoo
  
  VERSCHIEDENES
 externe usb-platten mounten
 datenrettung
 perl
  
  links


home
sitemap
suche
login
hilfeforum
impressum



Finde uns auf:
 

4. Flußkontrolle

Ein Programm besteht nicht nur aus Anweisungen die nacheinander abgearbeitet werden. In der Regel werden Aufgrund der zu verarbeitenden Daten Entscheidungen getroffen was das Programm als nächstes macht.


4.1 if

 

Mit den gerade eingeführten Operatoren können in der if-Anweisung der weitere Programmablauf gesteuert werden. Es können mehrere Bedingungen formuliert werden die nacheinander überprüft werden. Sollte keine der Bedingungen zutreffen, so wird der evtl. vorhandene "else"-Zweig ausgeführt.



$a = 10;

if ($a < 100)

{

Anweisungsblock

}

elsif ($a > 1000)

{

Anweisungsblock

}

else

{

Anweisungsblock

}

 

In den Anweisungen zur Flußkontrolle finden auch die zuvor erläuterten logischen Verknüpfungen Anwendung:


if ($a < 100 || $b > 1000)

{

Anweisungsblock

}

 


4.2 while

Die Bedingung der while-Schleife wird vor der Ausführung des Schleifenblocks überprüft. Wenn die Bedingung zutrifft, wird der Schleifenblock ausgeführt. Man spricht hier von einer "abweisenden" Schleife, d.h. der Code-Block wird evtl. gar nicht ausgeführt.


$a = 0;

while ($a < 10)

{

print $a++;

}

 

Bei $a++ handelt es sich um ein sogenanntes Postincrement - die Variable wird für eine Operation genutzt und anschliessend um 1 erhöht. Es gibt auch die Addition vor der Verwendung der Variablen: ++$a. Dies wird als Preincrement bezeichnet.

 

Eine Subtraktion ist ebenfalls möglich: --$a oder $a--


4.3 foreach

Mit foreach kann ein Array unbekannter größe bearbeitet werden. Das folgende Beispiel weist der sogenannten Steuerungsvariablen ($a) nacheinander jedes Listenelement zu.


@array = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

foreach $a (@array)

{

print $a;

}

 

Die Werte eines Hash können wie folgt ausgegeben werden:


foreach $a (keys %myhash)

{

print $myhash{$a};

}

 

 


4.4 for

Die for-Schleife gibt eine bestimmte Menge von Schleifendurchläufen exakt vor.



for ($a = 0; $a < 10; $a++)

{

print $a;

}

 

Die Anzahl der Durchläufe kann aber auch ohne eine Zuweisung an eine Variable geschrieben werden. Das folgende Beispiel gibt 10 Leerzeilen aus.


for (0..10)

{

print "\n";

}

 

Die Anzahl der Listenelemente ist über $#array bekannt und das Beispiel von foreach könnte also wie folgt mit einer for-Schleife realisiert werden:


@array = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9);

for ($i = 0; $i < $#array; $i++)

{

print $array[$i];

}

 


4.5 Schleifenabbruch

Unter gewissen Bedingungen möchte man eine Schleife sofort verlassen oder ernneut von Anfang durchlaufen.

last - verlässt die Schleife sofort
next - springt zum Anfang der Schleife und startet den nächsten Durchlauf

 

Die Schleife wird sofort erneut begonnen falls der gesuchte String nicht enthalten ist.

Die Schleife wird beendet falls der Zähler einen Grenzwert überschreitet.


while(<DH>)

{

if (index($_, "SUCHTEXT") < 0)

{

next;

}

$i++;

if ($i > 100)

{

last;

}

}

 


4.6 Subroutinen

Funktionen werden in Perl mit dem Schlüsselwort sub eingeleitet. Danach folgt der Funktionsname und der Anweisungsblock. Eine minimale Funktion könnte z.B. wie folgt aussehen:


sub print_hallo

{

print "hallo";

}

 

Diese Funktion kann nun mit der folgenden Anweisung gennutzt werden.


&print_hallo;

 

Damit eine Funktion lokale Variablen nutzen kann, müssen Variablen mit dem Schlüsselwort my definiert werden.

 

Parameter können beim Funktionsaufruf einfach in Klammern angegeben werden. Die Werte können in der Funktion aus der speziellen Variable @_ gelesen und einer lokalen Variablenliste zugewiesen werden.


sub print_hallo

{

my ($n, $text) = @_;

for ($i = 0; $i < $n; $i++)

{

print "$text\n";

}

}

&print_hallo(5, "hallo");

 

Das Beispiel gibt fünfmal "hallo" aus.