Funktionen können in Perl ausgelagert werden. D.h., sie werden in einer seperaten Datei gespeichert. In ein Perl-Script werden sie eingebunden durch require datei_name.extension
Voraussetzung dafür ist, daß sich die Datei in Verzeichnissen befindet, die in einem
Array namens @INC enthalten sind. In @INC befindet sich insbesondere das aktuelle Verzeichnis
sowie unter Linux z.B. /usr/lib/perl5/5.6.0 u.a.m.
@INC ist die Suchpfadliste für Funktionsbibliotheken (zunächst einmal).
@INC ist erweiterbar.
Die Funktionen können im Script verwendet werden, als wären sie direkt im Script definiert worden. Der Speicherbereich des Scripts1 ohne require wurde expandiert um den Speicherbedarf der Funktionen. Der Vorteil liegt also nicht in effizienterer Speicherverwaltung, sondern lediglich in der Übersichtlichkeit des Quelltextes und der Möglichkeit, Funktionsbibliotheken in mehreren Scripten gleichzeitig zu nutzen
Wie wäre es nun, wenn man nicht den gesamten Speicherbereich der Funktionsbibliothek in das Script kopiert (denn nichts anderes passiert durch require), sondern lediglich die Speicheradressen der Funktionen und Variablen dem Script übergibt ? Vordergründig gibt man die Mehrfachnutzung wieder preis, da dann nicht mehrere Scripten zugleich die Lib nutzen können. Jedoch kann man es dem Script überlassen, welche Funktionen und damit Speicherbereiche in das Script zur Laufzeit hineinkopiert werden.
Welche Funktionalitäten müssen dafür zur Verfügung gestellt werden ?
Zu 1 : Welche Speicherstruktur kommt in Frage ? Geleistet werden muß die unmittelbare Zuordnung einer Speicheradresse zu einem Funktionsnamen (allgemeiner : zu einem Elementnamen). Das leistet ein Hash. Dieser Hash braucht keinen Namen, wenn ich der Lib einen Namen gebe, über die ich sie ansprechen kann. Also ein anonymer Hash, der über eine Funktion (bless) mit dem Namen der Lib verknüpft wird. Die Namensgebung (Objektbezeichnung) muß daher innerhalb der erweiterten Lib erfolgen und erfolgt durch package name in der Lib, die jetzt als Modul bezeichnet wird. (Perl : Modul, Java : Klasse, zuweilen synonym verwendet)
Nun muß dieser dem packagename verknüpfte anonyme Hash noch einem Script zur Verfügung gestellt werden. Als Schnittstelle dient eine Funktion (new)
Daraus entsteht folgender Aufbau eines Perl-Moduls :
package my_modul sub new { bless {}; } sub func1 { ... } sub func2 { ... }