Wie kann ich einer Subroutine Parameter übergeben und wie bestimme ich den Rückgabewert?
(
Autor: Ishka & perl.de - Community)
Indem ich nach der Subroutine die zu übergebenden Werte aufführe.
routine ('Wert 1','Wert 2',3);
Die übergebenen Werte befinden sich dann in der Spezialvariablen @_
Bzw. für den zweiten Teil der Frage:
indem ich in der Subroutine return("Rückgabewert"); notiere.
Um jedem die Möglichkeit zu geben, möglichst schnell das zu
erfahren, was ihn interessiert, hab ich den Rest dieses Eintrags dreigeteilt:
Anfänger
Eine Subroutine ist ein selbst geschriebener Befehl. Subroutinen werden
angelegt, um häufiger vorkommende Aufgaben in einem Script
zu erledigen, was dann die Schreibarbeit reduziert, oder um ein Script
klar zu unterteilen, was die Übersichtlichkeit erhöht. Subroutinen
werden mit sub deklariert.
sub beispiel
{
print "Diese Ausgabe wurde durch eine Subroutine verursacht\n";
}
# Deklaration
beispiel(); # Aufruf
sub beispiel
Hier wurde die Subroutine deklariert. Danach folgt, in
geschweiften Klammern { }, der Code der Subroutine.
print "Diese Ausgabe wurde durche eine Subroutine verursacht\n";
An dieser Stelle erfolgt keine Ausgabe, erst beim Aufruf der Subroutine:
beispiel();
Hier erfolt dann schließlich die Ausgabe 'Diese Ausgabe wurde durche
eine Subroutine verursacht'. Um deutlich zu machen, daß es sich um
eine eigene Subroutine handelt, kann statt beispiel() auch &beispiel()
geschrieben werden
! Perl unterscheidet bei Namen von Subroutinen
wie bei allen anderen Namen zwischen klein- und großschreibung.
Manchmal genügt ein einfacher Aufruf einer Subroutine aber nicht:
sub produkt
{
???
}
print produkt(3,7); # 21
Dieses Problem wird im folgenden Abschnitt betrachtet, der auch für Leute
gedacht ist, die schon erfahren sind,
Erfahren, aber in einer anderen Programmiersprache
In Perl werden Subroutinen so deklariert:
sub routine
{
# inhalt
}
Der Zeilenumbruch am Ende der Zeile, in der sub steht ist zwingend.
Aber wie werden Parameter übergeben? Ganz einfach:
sub produkt
{
my($faktor1,$faktor2)=@_;
return($faktor1*faktor2);
}
print produkt(3,7); # 21
Erklärung:
In der Variablen @_ sind alle übergebenen Werte enthalten. In unserem
Beispiel 3 und 7. Durch my($faktor1,faktor2)=@_ wird der Variablen $faktor1
der Wert 3 und der Variablen $faktor2 der Wert 7 übergeben. Und
durch return() werden zwei Dinge erreicht: erstens wird der Rückgabewert
bestimmt, zweitens wird die Subroutine unverzüglich beendet.
Fazit:
Solange man sich noch nicht besser mit Perl auskennt, einfach in die
erste Zeile jeder subroutine
my($var1,$var2,...)=@_;
schreiben, wobei die Anzahl der Variablen mit der Anzahl der übergebenen
Werte übereinstimmt.
Rückgabewert:
Einfach return notieren, danach den Wert, den man übergeben möchte:
return("Rückgabewert");
Wer sich bereits mehr zutraut, kann gerne noch das folgende Kapitel lesen:
Fortgeschrittene
Um einer Funktion Parameter zu übergeben, muß man - wie bei den
vorgegebenen Befehlen, die Parameter in Klammern nach dem Befehl setzen.
Die übergebenen Parameter stehen dann in @_. @_ ist ein Array, bei
dem jedes Element auf das entsprechende Element der übergebenen
Element zeigt. Das heißt, falls zum Beispiel als ersten Wert die
Variable $text übergeben wurde und in der Subroutine steht:
$_[0]='Beispieltext';
so wird der Wert der Variablen $text auf 'Beispieltext' gesetzt.
Ansonsten kann @_ wie ein ganz normaler Array behandelt werden,
der am Anfang der Subroutine mit den übergebenen Werten belegt
ist. Ebenso ist @_ von $_ völlig unabhängig.
Rückgabewert:
Einfach return notieren, danach den Wert, den man übergeben möchte:
return("Rückgabewert");
Ergänzungen, Kommentare
Kommentare werden am besten in folgender Form vorgenommen, damit
sie im Inhaltsverzeichnis angezeigt werden:
---### Main.??? - 14 Jul 2003 - Betreff