Perl-Pakete und Module
In Perl hat jedes Paket eine separate Symboltabelle. Die definierende Syntax lautet:
package mypack;
Diese Anweisung definiert ein Paket namensmypack, und die Namen aller Variablen und Unterprogramme, die nach diesem Punkt definiert werden, werden in der Symboltabelle gespeichert, die mit diesem Paket verknüpft ist, bis eine weiterepackage-Anweisung angetroffen wird.
Jede Symboltabelle hat ihren eigenen Satz von Variablen- und Unterprogrammnamen. Die Namenssätze sind voneinander unabhängig, sodass derselbe Variablenname in verschiedenen Paketen verwendet werden kann und unterschiedliche Variablen repräsentiert.
Um von einem Paket aus auf eine Variable in einem anderen Paket zuzugreifen, können Sie sie in der Form "Paketname + doppelter Doppelpunkt (::) + Variablenname" angeben.
Die Standard-Symboltabelle, die die Namen von Variablen und Unterprogrammen speichert, ist diejenige, die mit dem benanntenmain-Paket verknüpft ist. Wenn im Programm andere Pakete definiert sind und Sie zur Standard-Symboltabelle zurückwechseln möchten, können Sie das main-Paket erneut angeben:package main;
Auf diese Weise verhält sich das folgende Programm, als wäre nie ein Paket definiert worden, und Variablen- und Unterprogrammnamen werden wie üblich gespeichert.
Im folgenden Beispiel enthält die Datei die Pakete main und Foo. Die spezielle Variable__PACKAGE__wird verwendet, um den Paketnamen auszugeben:
Beispiel
Das Ausführen des obigen Programms erzeugt das folgende Ergebnis:
包名 : main 1 包名 : Foo 10 包名 : main 100 包名: main 10
BEGIN- und END-Blöcke
Die Sprache Perl bietet zwei Schlüsselwörter: BEGIN und END. Beide können jeweils eine Reihe von Skripten enthalten, die ausgeführt werden, bevor oder nachdem der Programmhauptteil ausgeführt wird.
Die Syntax lautet wie folgt:
BEGIN { ... }
END { ... }
BEGIN { ... }
END { ... }
JederBEGIN-Block wird ausgeführt, nachdem das Perl-Skript geladen und kompiliert wurde, aber bevor andere Anweisungen ausgeführt werden.
JederEND-Anweisungsblock wird ausgeführt, bevor der Interpreter beendet wird.
BEGIN- undEND-Anweisungsblöcke sind besonders nützlich beim Erstellen von Perl-Modulen.
Wenn du es noch nicht ganz verstehst, können wir uns ein Beispiel ansehen:
Beispiel
Das Ausführen des obigen Programms erzeugt das folgende Ergebnis:
这是 BEGIN 语句块 Begin 和 Block 实例 这是 END 语句块
Was ist ein Perl-Modul?
In Perl 5 werden Perl-Pakete verwendet, um Module zu erstellen.
Ein Perl-Modul ist ein wiederverwendbares Paket. Der Modulname ist derselbe wie der Paketname, und die Dateiendung für Definitionen ist.pm。
Im Folgenden definieren wir ein Modul Foo.pm, und der Code sieht wie folgt aus:
Beispiel
In Bezug auf Module in Perl sind folgende Punkte zu beachten:
Die Funktionenrequireunduseladen ein Modul.
@INCist ein spezielles in Perl eingebautes Array, das Verzeichnispfade zu den Speicherorten von Bibliotheksroutinen enthält.
requireunduserufen die Funktionevalauf, um den Code auszuführen.
Am Ende1;muss ausgeführt werden und TRUE zurückgeben. Dies ist notwendig, andernfalls wird ein Fehler zurückgegeben.
Require- und Use-Funktionen
Module können über dierequireFunktion aufgerufen werden, wie unten gezeigt:
Beispiel
Es kann auch über die use-Funktion referenziert werden:
Beispiel
Wir stellen fest, dass require-Referenzen den Paketnamen verwenden müssen, um die Funktion anzugeben, während use dies nicht muss. Die Hauptunterschiede zwischen den beiden sind:
- 1. require wird verwendet, um Module oder Perl-Programme zu laden (das Suffix .pm kann weggelassen werden, aber das Suffix .pl muss vorhanden sein)
- 2. Die Perl-Anweisung use wird zur Kompilierzeit eingebunden, während require zur Laufzeit eingebunden wird.
- 3. Wenn Perl use ein Modul importiert, importiert es auch die Untermodule des Moduls. require kann sie jedoch nicht importieren; sie müssen erneut deklariert werden.
- 4. USE sucht im aktuellen Standard-@INC. Sobald das Modul nicht in @INC ist, kann es nicht mit USE importiert werden, aber require kann einen Pfad angeben.
- 5. Wenn USE auf ein Modul verweist, wird bei einem Modulnamen, der :: (doppelter Doppelpunkt) enthält, der doppelte Doppelpunkt als Pfadtrennzeichen verwendet, äquivalent zu / unter Unix oder \ unter Windows. Zum Beispiel:
use MyDirectory::MyModule
Durch Hinzufügen der folgenden Anweisung können Sie mithilfe des Moduls die Symbole in der Liste exportieren:
require Exporter; @ISA = qw(Exporter);
Das Array @EXPORT enthält die Namen der standardmäßig exportierten Variablen und Funktionen:
package Module;
require Exporter;
@ISA = qw(Exporter);
@EXPORT = qw(bar blat); # 默认导出的符号
sub bar { print "Hello $_[0]\n" }
sub blat { print "World $_[0]\n" }
sub splat { print "Not $_[0]\n" } # Not exported!
1;
Erstellen eines Perl-Moduls
Mit dem Tool h2xs, das mit der Perl-Distribution geliefert wird, können Sie einfach ein Perl-Modul erstellen.
Sie können h2xs im Kommandozeilenmodus eingeben, um seine Parameterliste anzuzeigen.
Syntaxformat von h2xs:
$ h2xs -AX -n ModuleName
Parameter description:
-AIgnorieren Sie den Autoload-Mechanismus
-XIgnorieren Sie XS-Elemente
-nGeben Sie den Namen des Erweiterungsmoduls an
Wenn sich Ihr Modul beispielsweise in derPerson.pm-Datei befindet, verwenden Sie den folgenden Befehl:
$ h2xs -AX -n Person
Beim Ausführen des obigen Programms wird Folgendes ausgegeben:
Writing Person/lib/Person.pm Writing Person/Makefile.PL Writing Person/README Writing Person/t/Person.t Writing Person/Changes Writing Person/MANIFEST
Im Person-Verzeichnis können Sie die neu hinzugefügten Verzeichnisse und Dateibeschreibungen sehen:
README: Diese Datei enthält einige Installationsinformationen, Modulabhängigkeiten, Urheberrechtsinformationen usw.
Changes: Diese Datei dient als Änderungsprotokolldatei für Ihr Projekt.
Makefile.PL: Dies ist der standardmäßige Perl-Makefile-Konstruktor. Er wird verwendet, um die Datei Makefile.PL zu erstellen, um das Modul zu kompilieren.
MANIFEST: Diese Datei wird verwendet, um automatisch Moduldistributionen des Typs tar.gz zu erstellen. Auf diese Weise können Sie Ihr Modul auf CPAN veröffentlichen oder an andere weitergeben. Sie enthält eine Liste aller Dateien in diesem Projekt.
Person.pm: Dies ist die Hauptmoduldatei, die Ihren mod_perl-Handler-Code enthält.
Person.t: Einige Testskripte für das Modul. Standardmäßig wird nur geprüft, ob das Modul geladen ist, und Sie können einige neue Testeinheiten hinzufügen.
t/: Testdateien
lib/: Verzeichnis, in dem der eigentliche Quellcode gespeichert ist
Sie können den Befehl tar (unter Linux) verwenden, um die oben genannten Verzeichnisse in Person.tar.gz zu packen.
Perl-Module installieren
Wir können die DateiPerson.tar.gzdekomprimieren und installieren, und die Ausführungsschritte sind wie folgt:
tar xvfz Person.tar.gz cd Person perl Makefile.PL make make install
Führen Sie zuerst "perl Makefile.PL" aus, um eine Makefile im aktuellen Verzeichnis zu erzeugen;
Führen Sie dann "make" aus, um zu kompilieren und die erforderlichen Bibliotheksdateien zu erstellen;
Verwenden Sie dann "make test", um zu prüfen, ob das Kompilierungsergebnis korrekt ist; führen Sie schließlich "make install" aus, um die Bibliotheksdateien in das Systemverzeichnis zu installieren. An diesem Punkt ist der gesamte Kompilierungsprozess abgeschlossen.
Weitere Erweiterungen