In Perl werden zwei Hauptoperatoren zum Einbinden von Modulen verwendet — use und require.
use — Bindet ein Modul zur Compile-Zeit ein. Es wird sofort beim Lesen der Perl-Datei ausgeführt, lädt das Modul in den Gültigkeitsbereich und ruft die Methode import auf (wenn vorhanden).
require — Führt das Laden des Moduls zur Laufzeit (run-time) aus.
require $some_module;).Beispiel:
use MyModule; # compile-time; ruft import auf require 'MyModule.pm'; # run-time; kein Import
Kann man
usemit einem variablen Modulnamen verwenden, z.B.use $module_name;?
Antwort: Nein. Der Operator use erfordert einen zur Compile-Zeit statisch bekannten Modulnamen, während require für Variablen geeignet ist.
Beispiel:
my $module = 'Some::Plugin'; require $module; $module->import();
Geschichte
Ein Projekt wurde mit einer großen Anzahl von dynamisch eingebundenen Plugins geschrieben. Einer der Entwickler hat versehentlich 'use $plugin' verwendet, was zu einem Kompilierungsfehler führte. Später stellte sich heraus, dass das Einladen nur über require möglich war, und danach der Aufruf von import.
Geschichte
In einem großen Perl-Service wurden Teile der Bibliotheken über 'require' geladen, ohne import aufzurufen. Die Variablen und Funktionen, auf die man gerechnet hatte, wurden nicht in den Namensraum importiert, und der Code begann mit undefinierbaren Unterroutinefehlern zu beenden.
Geschichte
Ein Entwickler versuchte, einen großen Block Code innerhalb einer Funktion über 'use' zu laden, in der Annahme, dass das Modul nur bei Bedarf geladen wird, aber in der Praxis wurde das Modul bereits beim Start geladen, was zu unnötigem Speicherverbrauch führte.