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.
Eine genauere Beschreibung der Wirkungsweise der Operatoren
my()
und local()
findet sich auf der
Seite Variablen und Symboltabellen.
@_
". 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: 01.11.1999 |