Perl-Unterroutinen sind ebenfalls benutzerdefinierte Funktionen.
Eine Perl-Subroutine ist ein separater Codeabschnitt, der eine bestimmte Aufgabe ausführt, wodurch sich wiederholender Code reduziert und das Programm leichter lesbar gemacht werden kann.
Perl-Unterroutinen können überall im Programm erscheinen und das Syntaxformat ist wie folgt:
Unterunterprogramm {Anweisungen;}Syntaxformat für den Unterprogrammaufruf:
Unterprogramm (Parameterliste);
In Versionen unter Perl 5.0 ist die Methode zum Aufrufen einer Unterroutine wie folgt:
&subroutine(Parameterliste);
In der neuen Version wird diese Aufrufmethode zwar ebenfalls unterstützt, ihre Verwendung wird jedoch nicht empfohlen.
Schauen wir uns als nächstes ein einfaches Beispiel an:
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
Hallo, Welt!
Perl-Unterprogramme können wie andere Programme mehrere Parameter akzeptieren. Parameter sind mit dem speziellen Array @_ gekennzeichnet.
Daher ist der erste Parameter der Unterroutine $_[0], der zweite Parameter ist $_[1] und so weiter.
Unabhängig davon, ob es sich bei den Parametern um Skalar- oder Array-Parameter handelt: Wenn der Benutzer die Parameter an die Unterroutine übergibt, ruft Perl sie standardmäßig als Referenz auf.
Wenn Sie das obige Programm ausführen, lautet das Ausgabeergebnis:
Die übergebenen Parameter sind: 10 20 30 Der Wert des ersten Parameters ist: 10 Der Durchschnittswert der übergebenen Parameter ist: 20
Benutzer können den Wert des entsprechenden Aktualparameters ändern, indem sie den Wert im @_-Array ändern.
Da die @_-Variable ein Array ist, kann sie als Liste an die Unterroutine übergeben werden.
Wenn wir jedoch Skalar- und Array-Parameter übergeben müssen, müssen wir die Liste auf den letzten Parameter setzen, wie unten gezeigt:
Das obige Programm kombiniert Skalare und Arrays und die Ausgabe ist:
Die Liste ist: 10 1 2 3 4
Wir können mehrere Arrays und Hashes an die Unterroutine übergeben, aber wenn mehrere Arrays und Hashes übergeben werden, gehen unabhängige Identitäten verloren. Daher müssen wir zum Bestehen Referenzen verwenden (wird im nächsten Kapitel vorgestellt).
Wenn eine Hash-Tabelle an die Unterroutine übergeben wird, wird sie in @_ kopiert und die Hash-Tabelle wird zu einer Liste von Schlüssel-/Wertkombinationen erweitert.
Das Ausgabeergebnis der Ausführung des obigen Programms ist:
Alter: 3Name: codercto
Unterprogramme können wie in anderen Programmiersprachen Funktionswerte mithilfe der Return-Anweisung zurückgeben.
Wenn keine Return-Anweisung verwendet wird, wird die letzte Zeile der Subroutine als Rückgabewert verwendet.
Das Ausgabeergebnis der Ausführung des obigen Programms ist:
3
Wir können Skalare, Arrays und Hashes in Unterprogrammen zurückgeben, aber wenn mehrere Arrays und Hashes zurückgegeben werden, gehen unabhängige Identitäten verloren. Daher müssen wir Referenzen (die im nächsten Kapitel vorgestellt werden) verwenden, um mehrere Arrays und Funktionen zurückzugeben.
Standardmäßig sind alle Variablen in Perl globale Variablen, was bedeutet, dass die Variablen überall im Programm aufgerufen werden können.
Wenn wir eine private Variable festlegen müssen, können wir sie mit dem Operator „my“ festlegen.
Der my- Operator wird zum Erstellen von Variablen mit lexikalischem Gültigkeitsbereich verwendet. Die von my erstellten Variablen bleiben vom Beginn der Deklaration bis zum Ende des geschlossenen Gültigkeitsbereichs bestehen.
Der geschlossene Bereich bezieht sich auf den Bereich innerhalb eines geschweiften Klammerpaars, einer Datei oder einer if-, while-, for-, foreach- oder eval-Zeichenfolge.
Das folgende Beispiel zeigt, wie eine oder mehrere private Variablen deklariert werden:
sub somefunc { my $variable; # $variable ist außerhalb der Methode somefunc() my ($another, @an_array, %a_hash); mehrere Variablen gleichzeitig deklarieren}Das Ausgabeergebnis der Ausführung des obigen Programms ist:
String innerhalb der Funktion: Hello, Codercto! String außerhalb der Funktion: Hello, World!
Wir können local verwenden, um temporäre Werte für globale Variablen bereitzustellen und nach Verlassen des Bereichs die ursprünglichen Werte zurückzugeben.
Von local definierte Variablen existieren nicht im Hauptprogramm, sondern im Unterprogramm und den vom Unterprogramm aufgerufenen Unterprogrammen. Sie können ihm beim Definieren einen Wert zuweisen, z. B.:
Das Ausgabeergebnis der Ausführung des obigen Programms ist:
String-Wert innerhalb der PrintMe-Funktion: Hello, Codercto!PrintCodercto String-Wert innerhalb der Funktion: Hello, Codercto!PrintHello String-Wert innerhalb der Funktion: Hello, World String-Wert außerhalb der Funktion: Hello, World!
Die Funktion des State-Operators ähnelt dem statischen Modifikator in C. Das Schlüsselwort state macht lokale Variablen persistent.
state ist ebenfalls eine lexikalische Variable und ist daher nur in dem lexikalischen Bereich gültig, in dem die Variable definiert ist. Beispiel:
Das Ausgabeergebnis der Ausführung des obigen Programms ist:
Der Wert des Zählers ist: 0 Zähler Der Wert ist: 1 Zähler Der Wert ist: 2 Zähler Der Wert ist: 3 Zähler Der Wert ist: 4
Hinweis 1: Der Status kann nur Variablen erstellen, deren geschlossener Bereich innerhalb der Unterroutine liegt.
Hinweis 2: state wurde ab Perl 5.9.4 eingeführt, daher muss use vor der Verwendung hinzugefügt werden.
Hinweis 3: Der Staat kann Skalare, Arrays und Hashes deklarieren. Aber Arrays und Hashes können nicht initialisiert werden, wenn sie deklariert werden (zumindest nicht in Perl 5.14).
Während des Unterprogrammaufrufs werden je nach Kontext unterschiedliche Arten von Werten zurückgegeben. Die folgende Unterroutine localtime() gibt beispielsweise eine Zeichenfolge in einem Skalarkontext und eine Liste in einem Listenkontext zurück:
Das Ausgabeergebnis der Ausführung des obigen Programms ist:
So 12. Juni 15:58:09 20162106-6-12 15:58:9