ProgrammierungBackend-Entwickler

Welche Möglichkeiten gibt es zur Organisation und zum Import von Modulen in Perl? Wie funktioniert das System @INC und use/require? Geben Sie ein Beispiel für die Erstellung und Einbindung eines eigenen Moduls.

Bestehen Sie Vorstellungsgespräche mit dem Hintsage-KI-Assistenten

Antwort

Zur Organisation von Code in Perl verwendet man Module (packages), die in separaten Dateien mit der Endung .pm abgelegt werden.

  • Zum Einbinden eines Moduls nutzt man use (in der Kompilierungsphase) und require (in der Ausführungsphase).
  • Bei der Suche nach einem Modul verwendet Perl ein spezielles Array @INC — das ist eine Liste von Verzeichnissen, in denen Perl nach Modulen sucht.

Beispiel für ein Modul:

Foo.pm

package Foo; use strict; use warnings; sub say_hello { print "Hello from Foo! "; } 1;

Einbinden und Benutzen:

use lib '.'; # Fügt das aktuelle Verzeichnis zu @INC hinzu use Foo; Foo::say_hello(); # Gibt aus: Hello from Foo!

Wesentliche Unterschiede:

  • use importiert das Modul zu Beginn der Skriptausführung und ruft automatisch die Methode import auf, wenn vorhanden.
  • require lädt das Modul nur beim ersten Aufruf.

Fangfrage

Was ist der Unterschied zwischen use und require? Wann verwendet man welchen Operator?

Antwort:

  • use — wirkt in der Kompilierungsphase, ruft automatisch import auf (wird normalerweise für Module verwendet).
  • require — wirkt zur Laufzeit, ist notwendig, wenn der Name des Moduls bis zur Ausführung unbekannt ist oder es nicht immer eingebunden werden muss.

Beispiele für reale Fehler aufgrund mangelnder Kenntnisse über das Thema


Geschichte

In einem großen Projekt wurde eine eigene Bibliothek über require eingebunden, ohne daran zu denken, dass sie exportierte Funktionen verwendet. Die verwendete Funktion wurde nicht exportiert, da require import nicht aufruft. Das Ergebnis — der Import von Symbolen funktioniert nicht, man muss die Funktionen explizit aufrufen.


Geschichte

Beim Verschieben des Moduls in einen eigenen Ordner wurde vergessen, den Pfad zum Ordner über use lib hinzuzufügen oder die Variable @INC zu ändern. Das Modul konnte nicht gefunden werden, das Skript endete mit einem Fehler, obwohl die Datei am richtigen Ort im Projekt lag.


Geschichte

In einer alten Anwendung wurde das Modul mit einem Kleinbuchstaben benannt, aber mit einem Großbuchstaben über use eingebunden: use foo; anstelle von use Foo;. Perl fand das Modul nicht, was die Funktionstüchtigkeit kritischer Teile der Anwendung beeinträchtigte.