zurückInhaltvorwärts Perl Einführung: Arbeiten mit Modulen

12. Arbeiten mit Modulen

Mit den Grundfunktionen und -befehlen, die Perl zur Verfügung stellt, lassen sich alle Probleme lösen. Allerdings gibt es Anwendungsbereiche, bei denen es sehr umständlich sein kann, wenn man nur mit Grundfunktionen arbeitet. Aus diesem Grunde gibt es sogenannte Module, die den programmiertechnischen Aufwand erheblich vermindern, indem sie einfach handzuhabende Unterroutinen zu einem Andwendungsgebiet zur Verfügung stellen.

Ein Beispiel für ein solches Anwendungsgebiet ist die Netzwerkprogrammierung. Module verhindern auch, daß man immer wieder das Rad neu erfinden muß, da man auf bereits existierende Problemlösungen zurückgreifen kann. Bereits die Perl-Standardinstallation beinhaltet eine Vielzahl von Modulen aus den verschiedensten Anwendungsbereichen, weitere Module lassen sich jederzeit nachinstallieren. Perl Module haben die Dateiendung .pm und befinden sich im lib Verzeichnis der Perlinstallation. Wir werden im Laufe der Zeit ausgesuchte Module vorstellen. Wie zusätzliche Module installiert werden, erklären wir etwas weiter unten

Um auf die Funktionen eines Moduls zuzugreifen, muß das Modul am Anfang des Skriptes mittels des use Befehls eingebunden werden. Beim Modulnamen muß die Dateieendung .pm nicht angegeben werden. Existieren mehrere Module zu einem Anwendungsgebiet, werden diese als Paket in einem Verzeichnis zusammengefasst, um ein Modul aus einem Paket einzubinden setzt man den Paketnamen mit 2 Doppelpunkten getrennt vor den Modulnamen.

use Modul;             # bindet das Modul "Modul.pm" ein
use Paket::Modul;      # bindet das Modul "Modul.pm" aus dem Paket "Paket" ein

Um auf die Unterroutinen zugreifen zu können, die von einem Modul zur Verfügung gestellt werden, sollte mann wissen, wie man mit Objekten und Klassen umgeht. Eine genaue Erläuterung dieser Begriffe würde jedoch den Rahmen dieses Tutorials sprengen. Wir verweisen hier auf auf das Literaturverzeichnis. Um mit objektorientierten Modulen arbeiten zu können, muß man jedoch nicht einen Wust an Theorie beherrschen, was man aber nicht so verstehen sollte, daß diese Theorie unwichtig ist. Jeder, der sich tiefer mit Perl (oder einer anderen Programmiersprache) beschäftigt, sollte mit den Grundzügen der Objekttheorie vertraut sein.

Hier einige Erläuterungen, die ausreichen sollten, um mit Objekten und Klassen arbeiten zu können, die jedoch nicht als erschöpfende Behandlung verstanden werden sollten.

Eine Klasse kann man als einen Bauplan verstehen, z.B. einen Bauplan für einen LKW. Der Bauplan ist kein LKW, sondern beschreibt nur wie man einen LLW baut. Wenn man einen LKW nach dem Bauplan zusammengebaut hat, hat man einen konkreten LKW, mit dem man fahren kann. Man spricht von einem LKW-Objekt oder anders formuliert von einer konkreten Instanziierung der LKW Klasse.

Um mittels einer Klasse ein konkretes Objekt zu erzeugen, benutzt man in Perl (aber auch z.B. in C++) den Befehl new. Im Rahmen der Erzeugung eines neuen Objekts mittels new hat man auch die Möglichkeit das neu erzeugte Objekt mittels geeigneter Anfangsparameter zu initialisieren. Ein konkreter LKW hat nun bestimmte Eigenschaften und Zustände, die man manipulieren kann. Z.B. hat ein LKW eine bestimmte Geschwindigkeit, die sich zwischen 0 und der Maximalgeschwindigkeit bewegt, und die man verändern kann.

Man manipuliert die Eigenschaften bzw. Zustände eines Objekts mittels sogenannter Methoden. Diese Methoden sind im Prinzip nicht anderes als betimmte Unterroutinen oder Funktionen. Auf unser Beispiel bezogen wäre eine möglich Methode die Methode Geschwindigkeit, die es ermöglicht, die Geschwindigkeit eines LKWs zu verändern. Die folgende Zeilen sollen das Gesagte verdeutlichen:

use LKW; # bindet das objektorientierte Modul LKW in das Perl-Skript ein

$transporter=LKW->new(100); # Erzeugt ein konkretes LKW Objekt namens
                            # $transporter und intialisiert es mit
                            # einer Anfangsgeschindigkeit von 100 km/h.
                            # Der LKW existiert also jetzt und fährt
                            # schon mit 100 km/h.

$transporter->Geschwindigkeit(150); # Der LKW wird mittels der Methode
                                    # Geschwindigkeit auf 150 km/h
                                    # beschleunigt.

$transporter->Geschwindigkeit(0);   # Der LKW wird mittels der Methode
                                    # Geschindigkeit zum stehen gebracht.

Die erste Zeile bindet das (fiktive) objektorientierte Modul LKW in das Skript ein. Anschließend wird mittels der new Methode ein neues Objekt namens $transporter erzeugt, das mit 100 initialisiert wird. Man beachte den Pfeiloperator ->, der Klassennamen vom Methodennamen abtrennt. In den nächsten Zeilen wird mittels der Methode Geschwindigkeit die Geschwindigkeit des LKW Objekts auf 100 erhöht bzw. auf 0 herabgesetzt. Auch hier wird, wie immer, der Pfeiloperator benutzt, um nun den Objektnamen, $transporter, vom Methodennamen, Geschwindigkeit, abzutrennen.

Installation von Modulen

Die Standardinstallation von Perl bringt schon eine große Anzahl an Modulen mit, irgendwann kommt aber der Punkt, wo man selber ein neues Modul installieren muß. Sei es um ein bestehendes Paket upzudaten oder einfach um ein neues Modul für einen speziellen Anwendungszweck der bestehenden Installation hinzuzufügen.

Die erste Frage, die man zu hören bekommt ist fast immer die gleiche: Wo bekomme ich Modul XYZ her? Die Frage kann man kurz und knapp mit CPAN benatworten (auch wenn dies für Windows User nicht unbedingt der bequemste Weg ist). CPAN ist die Abkürzung für Comprehensive Perl Archive und dort findet man wirklich für (fast) jeden Zweck ein entsprechendes Modul zum Download. Eine aktuelle Übersicht über die zahlreichen CPAN Spiegelserver findet man unter http://www.perl.com/perl/CPAN

Die meisten Module kommen in einem Archiv mit einer ausführlichen (englischen) Anleitung zur Installation, trotzdem scheitern hier gerade viele Windows Benutzer. Denn im Gegensatz zu einem Linux System hat nicht gerade jeder Windows Nutzer einen C Compiler mit einem Make Utility installiert, was bei vielen Modulen nötig ist. Zumindest ein Make Utility wird in jedem Fall benötigt.
Sind diese voraussetzungen gegeben, reichen meist die Aufrufe
"perl Makefile.pl"
"make test"
"make" und
"make install" aus, um das gewünschte Modul in die eigene Installation zu integrieren.

Da diese Schwierigkeiten auch bei Activestate bekannt sind, wurde dort ein kleines Tool geschrieben um die Modulinstallation zu vereinfachen. Der Perl Package Manager oder kurz ppm benötigt hierfür aber speziell vorbereitete Pakete, diese bietet Activestate aber auch auf dem eigenen Webserver an. D. h. es kann schon eine neuere Version des Moduls geben als die auf dem Activestate Server ppm Version. Dafür kann man aber auch kurz und schmerzlos die eigene Installation auf aktualität überprüfen und ggf. in einem Rutsch auf den neuesten Stand bringen.

Wie sieht nun konkret die installation eines Moduls mit ppm aus?
Im einfachsten Fall ruft man ppm an der Kommandozeile mit der install option und dem Paketnamen auf:

ppm install neuesmodul

Nun verbindet sich ppm mit dem Webserver von Activestate, lädt das Modul herunter und installiert es. Als angenehmer Nebeneffekt wird auch gleich die HTML Dokumentation korrekt eingebunden.

Allerdings kann es auch hier zu Problemen kommen, z. B. wenn der Benutzer gut abgeschrimt hinter einem Proxy-Server und/oder einer Firewall sitzt.
Wer Schwierigkeiten hat direkt die Module über ppm herunterzuladen, kann sich auch die gezppten Pakete per Webbrowser auf die heimische Platte beamen. Activestate bietet die gezippten Module unter http://www.activestate.com/packages/zips zum Download an.

Nun muß das Zip File zunächst in ein temporäres Verzeichnis entpackt werden. (WinZip, das kostenlose EasyZip oder ähnliches sollte sowieso in keinem Haushalt fehlen) Wer sich das ganze mit dem Explorer anschaut, wird zunächst wohl etwas entäuscht sein, denn ausser einem tar.gz archiv, einer ppd Datei und einem readme ist nicht viel herausgekommen. Wenn man nun auf der Kommandozeile in das temporäre Verzeichnis wechselt, kann man das neue Modul mit "ppm install neuesmdoul.ppd" installieren.

Wie bereits angedeutet, kann ppm noch eine Menge mehr, es lohnt sich einmal genauer die Doku hierzu anzuschauen.

Perl Einführung: Arbeiten mit Modulen zurückInhaltvorwärts