sub
eingeleitet. Der Aufruf eines
Unterprogramms erfolgt durch das Voranstellen eines "&
"
vor den Namen. Werden Klammern für Parameter (eventuell leer)
verwendet, kann auf das "&
" verzichtet werden.
Beispiel:
#!/usr/local/bin/perl -w print "Hier ist das Hauptprogramm.\n"; &UNTER; UNTER(); sub UNTER { print "Hier ist das Unterprogramm.\n"; } |
Hier ist das Hauptprogramm. Hier ist das Unterprogramm. Hier ist das Unterprogramm. |
Steht der Aufruf des Unterprogramms weiter hinten im Skript als die Definition oder ein eventuell vorhandener Prototyp, kann auch der Name alleine benutzt werden.
#!/usr/local/bin/perl -w sub UNTER; # Prototyp print "Hauptprogramm\n"; UNTER; # Name allein genügt sub UNTER { # Definition print "Unterprogramm\n"; } |
Die Definition des Unterprogramms kann (im Gegensatz z.B. zu Pascal) an einer beliebigen Stelle im Quelltext stehen.
local
und my
.
Sie unterscheiden sich in bezug auf Unterprogramme darin, daß
Variablen, die in my
deklariert werden, nur dort im
Unterprogramm definiert sind (genauer: innnerhalb des Blockes, in
dem sie deklariert werden). Auf "local
"-Variablen dagegen
kann auch in weiteren Unterprogrammen zugegriffen werden, deren Aufruf innerhalb
des Unterprogramms erfolgt, in dem die Variablen deklariert werden.
Beispiel:
#!/usr/local/bin/perl -w $gl = 1; $loc = 2; $my = 3; print "main: \$gl = $gl \$loc = $loc \$my = $my\n"; sub1(); print "main: \$gl = $gl \$loc = $loc \$my = $my\n"; sub sub1 { local $loc = 7; my $my = 8; print "sub1: \$gl = $gl \$loc = $loc \$my = $my\n"; sub2(); } sub sub2 { print "sub2: \$gl = $gl \$loc = $loc \$my = $my\n"; } |
main: $gl = 1 $loc = 2 $my = 3 sub1: $gl = 1 $loc = 7 $my = 8 sub2: $gl = 1 $loc = 7 $my = 3 main: $gl = 1 $loc = 2 $my = 3 |
Wie man sieht, ist $gl
überall unverändert
verfügbar, während $loc
in sub1
durch
eine neue Variable gleichen Namens ersetzt wird. Deren Wirkung erstreckt
sich aber bis in das zweite Unterprogramm. Dagegen ist die Zuweisung
$my = 8
nur in sub1
von Bedeutung. An der
letzten Ausgabezeile erkennt man, daß die Werte der globalen
Variablen von den lokalen Variablen gleichen Namens nicht beeinflußt
werden.
@_
". Somit kann innerhalb des Unterprogramms
auf die (im Prinzip beliebig vielen) Parameter über
$_[0]
,$_[1]
,$_[2]
,...
zugegriffen werden.
Beispiel:
#!/usr/local/bin/perl -w &S(1,2); &S("aaa","bbb","ccc","ddd"); sub S { local($i); for($i = 0;$i < @_;$i++) { print "$_[$i]\n" } } |
1 2 aaa bbb ccc ddd |
Zur Erinnerung: @_
steht im obigen Beispiel im
skalaren Kontext und gibt daher die Zahl der Elemente in dem
Parameter-Array an.
return()
(Klammern optional)
verwendet werden. Fehlt eine solche Angabe, so ist der
Rückgabewert automatisch das Ergebnis der zuletzt
ausgeführten Operation im Unterprogramm.
Beispiel:
#!/usr/local/bin/perl -w $a = &S(7,19); print $a."\n"; $a = &T; print $a."\n"; sub S { $_[0] + $_[1] } sub T { return 100; } |
26 100 |
Autor: Eike Grote | Letzte Änderung: 13.08.1997 |