# CPAN

CPAN (englisch Comprehensive Perl Archive Network) ist ein weltweit gespiegeltes Online-Repository für Perl-Module, -Anwendungen und -Dokumentationen, das am 25. Oktober 1995 in Anlehnung an die TeX-Library CTAN ins Leben gerufen wurde und sich schnell zum De-facto-Standard entwickelt hat. Es bietet die Möglichkeit einer komfortablen Installation und Verwaltung von Perl-Modulen. Im Oktober 2020 umfasste das CPAN circa 260 Server auf fünf Kontinenten und enthielt ca. 39.700 Distributionen von über 12.700 Autoren mit einem Volumen von ungefähr 21 GB.

## Entstehung

Das Repository entstand aus einfach verlinkten, privaten Webseiten, die freie Perlmodule zum Herunterladen anboten und deren Betreiber sich perl-packrats nannten. Die Seite des Finnen Jarkko Hietaniemi entwickelte sich dabei zum Vorreiter, da sie meist sehr aktuell war und die meisten Module enthielt. Sie wurde immer selbstverständlicher von den anderen gespiegelt, bis Jarkko den Inhalt der wichtigen Archive vereinigte und somit das CPAN schuf. Andreas König erweiterte dieses Archiv um den PAUSE (Perl Authors Upload Server), der es den Autoren ermöglicht, ihre Module selbst im CPAN zu veröffentlichen. Andere Teile dessen, was heute als CPAN sichtbar ist, gehen wiederum auf die Verbesserungen von Jarkko zurück. Lediglich die Suchmöglichkeiten und der CPAN-Multiplexer sind das Werk anderer Perl-Veteranen.

## Regeln

Ein Teil des Erfolges ist auch darauf zurückzuführen, dass sich über die Jahre strikte Standards für die hochgeladenen Module etabliert haben. Jedes Modul sollte zumindest eine MANIFEST-Datei, eine Readme-Datei, Metainformationen in Form einer META.yml-Datei und ein Installationsskript enthalten. Außerdem sollten alle Funktionen direkt im Quellcode mit POD-Dokumentation versehen werden. Zusätzlich sollten möglichst viele Test-Skripte enthalten sein, diese werden beim Installieren automatisch ausgeführt und deren Resultate (mit der Zustimmung des Benutzers) ebenfalls automatisch an CPAN zurückgesendet. So kann der Autor binnen kürzester Zeit Testresultate von verschiedensten Systemen erhalten.

## CPAN-Modul

Mit dem Modul CPAN von Andreas König kann man leicht von einer Kommandozeile aus – unabhängig vom Betriebssystem – ein Perlmodul im CPAN suchen, herunterladen, testen, installieren, upgraden oder deinstallieren. Dies ist auch interaktiv mit der enthaltenen CPAN-Shell (keine Shell im eigentlichen Sinne) möglich, die man einfach durch die Eingabe von cpan aufruft. Für diese bildeten sich die Alternativen CPANPLUS und CPANMINUS. Besonders die letztere wird wegen ihrer sehr einfachen Benutzungsweise und kurzen, präzisen Ausgaben häufig Anfängern empfohlen, muss aber als Modul 'App::cpanminus' installiert werden, wohingegen CPAN von Anfang an enthalten ist.

### Module installieren

CPAN-Module werden mit dem klassischen make-Werkzeug installiert, ähnlich, wie bei Autoconf, wird allerdings auch hier das Makefile erst auf dem Zielrechner, auf dem das CPAN-Modul installiert werden soll, erstellt. Dies wird naheliegend mit einem mitgelieferten Perl-Programm realisiert, was etwa dem Aufruf von ./configure bei Autoconf entspricht.
Eine Installation läuft anschließend wie bei der eines gewöhnlichen Programms ab (siehe rechts): Mit make wird der Quelltext ggf. kompiliert (z. B. betriebssystemabhängige Teile, die in C geschrieben sind), mit make test werden die mitgelieferten Testprogramme ausgeführt und mit make install wird das CPAN-Modul in das von der Perl-Installation vorgeschriebene Zielverzeichnis installiert.

## Erweiterungen

In den letzten Jahren gab es mehrere Initiativen, die dem CPAN neue Funktionen gaben bzw. diesem beigefügt wurden:
* Phalanx Project – Initiative zur Verbesserung der Dokumentation und Testabdeckung von Perl und seiner wichtigsten 100 Module.
* CPAN Testing Service (CPANTS) – Ein Dienst, der alle Distributionen automatisch auf mögliche formale Unzulänglichkeiten prüft.
* CPAN Testers – überprüft neue Modulversionen auf ihre Lauffähigkeit unter verschiedenen Betriebssystemen und Konfigurationen.
* CPAN Ratings – Bewertungen (0 bis 5 Sterne) und Rezensionen von Modulen.

## Alternative

ActiveState liefert zu seiner Distribution ActivePerl ein vom Funktionsumfang her ähnliches Werkzeug namens State Tool mit, das seine Dateien allerdings nicht direkt aus dem CPAN, sondern aus einem daraus abgeleiteten Repository bezieht. Bis dahin erfüllte der Perl Package Manager diese Funktion.