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
      

UtilFaqSubForm edit

Titel Wie kann ich einer Subroutine Parameter übergeben und wie bestimme ich den Rückgabewert?
Autor Ishka & perl-community
Bereich FaqSubroutinen
Tags
Topic revision: r4 - 2010-02-04 - 10:27:10 - ReneeBaecker
 
Bitte die NutzungsBedingungen beachten.
Bei Vorschlägen, Anfragen oder Problemen mit dem PerlCommunityWiki bitten wir um WebBottomBarExample">Rückmeldung.