Was ist CPAN?

»CPAN« ist die Abkürzung für »comprehensive Perl archive network« (auf Deutsch etwa »umfangreiches Perl Archiv-Netzwerk«). Es wurde schon mit vielen Namen belegt – für einige ist es »die Killer-Applikation« von Perl, für andere seine Seele.

CPAN ist ein zentraler Ort, an dem Erweiterungen für Perl gesammelt werden. Diese Erweiterungen betreffen wegen Perls Flexibilität sowohl die sprachlichen Ausdrucksmöglichkeiten als auch die Funktionalität.

Erweiterung der sprachlichen Ausdruckmöglichkeit

Was meine ich damit? Die sprachlichen Ausdrucksmöglichkeiten kann man in gewissen Grenzen selbst erweitern. Zum Beispiel funktionieren Exceptions in Perl grundsätzlich so wie in anderen Sprachen, es sieht nur anders aus. Wenn man nun das Aussehen und den Komfort aus anderen Sprachen auch in Perl nutzen möchte, kann man Perl zum Bespiel mit dem Modul Try::Tiny erweitern.

Ohne dieses Modul wirft man eine Exception mit der Funktion »die« und erhält sie Exception in einer Variablen. Exceptions sehen also aus wie ein Funktionsaufruf und ein Variablenvergleich.

Mit diesem Modul kann man sich dann so ausdrücken:


try {

  die "Exception";

} catch {

  warn "Exception: $_"; 

};

Die Formulierung mit »try« und »catch« ist ohne dieses Modul nicht möglich. Wenn du dieses Modul nutzt, erweiterst du damit also deine Ausdrucksmöglichkeit.

Erweiterung der Funktionalität

Aus anderen Sprachen kennst du vermutlich schon diese Möglichkeit der Erweiterung. Tatsächlich dürfte dies der Grund sein, warum jeder Entwickler Erweiterungen verwendet: Andere haben schon etwas entwickelt, und das möchtest du verwenden, damit deine Programme schneller mehr machen und mächtiger sind.

CPAN lebt vom Mitmachen

Diese Erweiterungen kann sich jeder kostenlos herunterladen und damit sein Perl erweitern.

Anders herum funktioniert das auch: Jeder kann hier seinen Code veröffentlichen und anderen Entwicklern zur Verfügung stellen.

Technisch gesehen veröffentlichen Autoren hier ein Archiv von Dateien und versehen es mit einer Versionsnummer. Die im Archiv enthaltenen Dateien bilden dann den Inhalt des Moduls.1

Anhand der Versionsnummer wird ein unterschiedlicher Entwicklungsstand der Modul gekennzeichnet.

Wie kann ich es benutzen?

Es gibt zwei Anwendungsfälle für CPAN, die ich die hier zeigen möchte: suchen und installieren von Modulen.

Wie kann ich ein Modul suchen?

Die Seite MetaCPAN ist dein Tor zum CPAN.

Wie wäre es, wenn du jetzt kurz dort nach Try::Tiny suchst? Stöbere dort mal ein bisschen, ich warte so lange.

Na, wie war’s?

Ich vermute, dass du ein bisschen durch die Dokumentation gescrollt hast und von den vielen Links einige ausprobiert hast. Und dann warst du von der Fülle von Informationen vielleicht etwas erschlagen und bist hierher zurückgekehrt.

Jede Übersichtsseite zu einem Modul ist vollgepackt mit Links, die dir die unterschiedlichen Aspekte zeigen: seine Dokumentation (der Hauptteil in der Mitte), etwas über den Autor (oben links und rechts), auf welchen Plattformen das Modul funktioniert (der »Testers«-Link links, und natürlich der Inhalt des Archivs (»Browse«).

Wie kann ich ein Modul installieren?

Wenn du dann ein Modul gefunden hast, dass du benutzen möchtest, musst du es installieren. Dafür benutzt du am besten »cpanm«.

Lass uns mal eben das Modul »Try::Tiny« installieren, von dem ich dir eben etwas gezeigt habe. Dafür gehst du in eine Shell und gibst folgendes ein:


> cpanm Try::Tiny

Du solltest dann etwa diese Ausgabe sehen (Stand Juli 2017):


--> Working on Try::Tiny
Fetching http://www.cpan.org/authors/id/E/ET/ETHER/Try-Tiny-0.28.tar.gz ... OK
Configuring Try-Tiny-0.28 ... OK
Building and testing Try-Tiny-0.28 ... OK
Successfully installed Try-Tiny-0.28 (upgraded from 0.24)
1 distribution installed

Die erste Zeile zeigt dir, an welchem Modul gerade gearbeitet wird.

In der zweiten Zeile wird dir gesagt, woher das Modul geholt wird. An der URL kannst du erkennen, dass der Autor »ETHER« heißt und das Modul in der Version 0.28 gefunden wurde. Wenn du vorhin, als ich gewartet habe, auf MetaCPAN nach diesem Modul gesucht hast, wird dir diese Information bekannt vorkommen – sie wurde dort auch angezeigt.

Zeile drei sagt dir, dass das Modul konfiguriert wird. In diesem Schritt werden die Grundlagen dafür geschaffen, dass das Modul installiert und danach von dir verwendet werden kann. Was dort genau passiert, hängt vom Modul ab; hier wird beispielsweise dem Modul mitgeteilt, wohin es installiert werden soll.

Im nächsten Schritt wird das Modul dann gebaut. Daran schließt sich dann das Ausführen der automatisierten Tests an. Wenn hier keine Fehler gefunden wurden, installiert »cpanm« das Modul. Ab jetzt kannst du es verwenden.

Gib dies in die Shell ein:

perl -MTry::Tiny -e 'try { die "Fehler!" } catch { print "abgefangen\n" }'

Wenn das Modul installiert wurde, dann sollte bei dir nun »abgefangen« ausgegeben worden sein. Wenn das Modul nicht installiert werden konnte, dann wirst du etwa folgende Ausgabe sehen:

Can't locate Try/Tiny.pm in @INC (you may need to install the Try::Tiny module) (@INC contains: <lange Liste von Verzeichnissen>).
BEGIN failed--compilation aborted.

Die erste Zeile sagt dir, dass das Modul nicht gefunden werden konnte. Die lange Liste von Verzeichnissen am Ende der Zeile sagt dir, wo perl das Modul überall gesucht hat. (Diese Ausgabe wird deine Shell typischerweise umbrechen, so dass einige Verzeichnisnamen vielleicht zerhackt ausgegeben werden.)

Wenn ein Modul nicht gefunden werden konnte, hat dies üblicherweise folgende Ursachen: Das Modul ist überhaupt nicht installiert; das Modul ist so installiert, dass perl es nicht finden kann; oder der Name des Moduls ist falsch geschrieben.

Zusammenfassung

Da war es in Kürze zum CPAN. Ich habe dir beschrieben, was es ist, und die beiden häufigsten Anwendungsfälle erklärt: Wie du ein Modul suchst und wie du es installierst. Viel Spaß beim Stöbern!


  1. Ich schreibe hier von Modul, tatsächlich kann in dem Archiv aber alles mögliche enthalten sein. Es kann ein kleines Programm enthalten, ein Modul, nur Dokumentation oder eine große Modulgruppe. Oder alles zusammen. Auch dies ist flexibel und hier werden keine Einschränkungen gemacht. Sagte ich schon, dass Perl flexibel ist? [return]
comments powered by Disqus