ModulePerl

Nach einer gewissen Programmiererfahrung stellt man fest, dass man verschiedene Funktionen, wie das Einlesen oder Ausgeben von Daten, immer wieder braucht. "Copy-Paste" lässt grüßen! Man könnte jetzt natürlich diese für die Perlwelt oft unwichtigen kleinen Funktiönchen dem Perlinterpreter als Standardfunktionen einbauen zu versuchen lassen. Larry Wall und seine Mitarbeiter haben wahrscheinlich genug zu tun. Der Perl-Interpreter würde außerdem sehr viel langsamer ...

SeitenanfangSeitenendeWas ist ein Modul?

Deshalb gibt es wie in anderen Programmiersprachen auch hier die Möglichkeit Funktionen "einzubinden". Neben den fest eingebauten Funktionen gibt es also noch welche, die man seinem Code hinzufügen kann, wenn man diese braucht. Solche Funktionen existieren dann bereits als Perlscript in sogenannten Modulen.

Ein Modul ist also eine Sammlung von Funktionen und auch Variablen, die normalerweise für eine bestimmte Aufgabe erstellt wurden. Benötigt man nun für eine bestimmte Aufgabe eine solche Funktion (und man will sie nicht selbst programmieren), kann man das Modul, das die benötigte Funktion enthält, seinem Code einfach hinzufügen. Man spricht dann auch von "Modul einbinden". Ist das Modul einmal eingebunden, kann man die darin enthaltenen Funktionen und Variablen ganz normal verwenden.

Es wurden bis jetzt schon zig Module programmiert. Einige davon werden als Standardmodul bezeichnet. Das sind eben die, die bei einer Standardinstallation des Perlinterpreters mit installiert werden. Ferner gibt es dann noch das CPAN, in der eine riesengroße Sammlung von Perlmodulen vorliegt und heruntergeladen werden können: http://www.perl.com/CPAN/ (CPAN groß geschrieben!). Dort findet man auch diese Module, die es noch nicht geschafft haben als Standard deklariert zu werden.

SeitenanfangSeitenendeEinbinden eines Moduls - require und use

Es gibt zwei Arten des Einbindens, die benutzt werden: Zum einen die Funktion require und zum anderen die Funktion use. Der Unterschied besteht im Zeitpunkt des Einbindens des Moduls. use tut dies vor dem Ausführen des Perlcodes, require hingegen erst dann, wenn der Perlinterpreter zu der Zeile angelangt ist, wo der require-Befehl ausgeführt wird. Es wird bevorzugt die use-Funktion benutzt. Hierzu ein Beispiel:

Das Modul test.pm:

# ein Test-Modul:

print "Ich bin das Test-Modul!\n";

1;

Programm: t_requ.pl:

print "Hallo, wer bist du?\n";
require "test.pm";
Hallo, wer bist du?
Ich bin das Test-Modul!

Programm: t_use.pl:

print "Hallo, wer bist du?\n";
use "test.pm";
Ich bin das Test-Modul!
Hallo, wer bist du?
Man könnte den Unterschied hier noch etwas feiner herausarbeiten, doch näheres möchte ich hier nicht erläutern ...

SeitenanfangSeitenende@INC - Pfade für die Modulsuche

Damit der Perlinterpreter überhaupt weiß, wo die Perlmodule installiert sind, existiert das Array @INC, indem Pfade gespeichert sind. In diesen Pfaden sucht der Perlinterpreter nach Modulen.

Den Inhalt von @INC bekommt man so:

foreach (@INC) {
  print $_."\n";
}
C:/Programs/perl/lib
C:/Programs/perl/site/lib
.

Will man also Module schreiben, die man wie die vorhandenen Module benutzen will, muss man diese in einem der Verzeichnisse von @INC abspeichern oder man speichert die eigenen Module in einem anderen Verzeichnis und fügt dann dieses dem Array @INC hinzu - und zwar am Anfang des Perlprogramms. Ein Beispiel wie so eine Programmzeile aussieht:

use lib "/httpd/docs/cgi-bin/";

Damit ist das Verzeichnis "/httpd/docs/cgi-bin/" dem Array @INC hinzugefügt worden. Das Verzeichnis wurde aber nur lokal hinzugefügt, das heißt, im nächsten Perlskript ist das Verzeichnis @INC wieder wie vorher.

Möchte man aus einem Unterverzeichnis (z. B. my\) von einem Verzeichnis aus @INC Module einlesen, dann sieht das folgendermaßen aus:

use "my/irgendeinmodul.pm";
# oder
use my::irgendeinmodul;

Seitenanfang FehlermeldungHilfe zur Fehlermeldung © 2001-2003 Email an den AutorPerl, Lehrstuhl Mathe II, Uni Bayreuth