Faulheit und Ungeduld, ihr herausragenden Tugenden wahrhaft großer
Programmierer! Euch werde ich in Zukunft huldigen - denn ab jetzt
wird kopiert statt entwickelt! Oft lohnt sich, statt selbst an einem
Perl-Problem herumzubasteln, ein Blick aufs CPAN. So ist das Ziel dieser
neuen Artikelreihe, jeden Monat neue Perl-Anwendungen vorzustellen,
die sich schamlos aus dem CPAN-Fundus bedienen.
Heute gibt's nicht nur eine Einführung in die Architektur des CPAN, sondern
auch noch eine Bedienungsanleitung für das Modul CPAN.pm
- den
raffinierten CPAN-Saugrüssel.
Auf dem Comprehensive Perl Archive Network stellen engagierte Perl-Programmierer ihre wiederverwendbaren Entwicklungen der Allgemeinheit zur Verfügung. Da kein einzelner Server technisch in der Lage wäre, die Modulwünsche sämtlicher Perl-Anhänger weltweit zu befriedigen, lagern die Module des CPAN auf dutzenden gespiegelter Rechner.
Welcher CPAN-Server ist der nächste? Ein handelsüblicher Browser bringt es an den Tag: Der CPAN-Dispatcher von Tom Christiansen
http://www.perl.com/CPAN
präsentiert eine Liste verschiedener CPAN-Spiegel mit derzeit zwei Servern aus deutschen Landen:
ftp://ftp.gmd.de/packages/CPAN ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN
Eine einmal getroffene Wahl legt der Dispatcher in einem Cookie ab, das der benutzte Browser speichert. Eine nachfolgende Anfrage nach einer Datei unterhalb des Verzeichnisses http://www.perl.com/CPAN/ leitet der Dispatcher automatisch zum gewählten CPAN-Spiegel um: Aus der Anfrage
http://www.perl.com/CPAN/CPAN.html
nach dem CPAN-Einführungsdokument wird so flugs
ftp://ftp.gmd.de/packages/CPAN/CPAN.html
und (fast) keine unnötigen Byteströme jagen durch den Atlantik.
Natürlich dürfen die CPAN FTP-Server auch traditionell über eine anonymous-FTP-Verbindung angepumpt werden. Die Übernahme des nächstgelegenen CPAN-URL in die 'Bookmark'-/'Favorites'-Liste eines WWW-Browsers ist jedoch auf Dauer komfortabler.
Das CPAN enthält zunächst einmal die neuesten Distributionen
des Perl-Interpreters perl
selbst. Weiter steht eine Vielzahl
von Modulen zur freien Verfügung.
Abbildung 1 zeigt anhand der Perl-Distribution perl5.004_02.tar.gz
und des Moduls CPAN-1.29.tar.gz
ausgewählte Zugriffspfade unterhalb
des CPAN
-Verzeichnisses jedes CPAN-Servers.
Abb.1: Ausgewählte Zugriffspfade innerhalb des CPAN |
So liegt, wie aus dem untersten Pfad von Abbildung 1 hervorgeht,
die aktuellste Perl-Version (immer) unter
src/latest.tar.gz
oder (derzeit)
src/5.0/perl5.004_02.tar.gz
zur Abholung bereit.
Das im Aufmacher hochgejubelte und weiter unten beschriebene
Modul CPAN.pm
von Andreas König
findet sich in der aktuellsten Version CPAN-1.29.tar.gz
in folgenden Verzeichnissen:
/modules/by-authors/Andreas_Koenig
zum Ziel
Ist, wie im vorliegenden Fall, das Modul ``alleinstehend'', also nicht
Bestandteil eines Bundles, liegt die Distribution im
by-module
-Pfad unter dem Modulnamen: modules/by-module/CPAN
Der by-category
-Pfad unterteilt die Module in Kategorien von
02_Perl_Core_Modules
, 03_Development_Support
usw.
bis 23_Miscellaneous_Modules
und verzweigt darunter jeweils zum entsprechenden
Modul. CPAN.pm
nimmt eine Sonderstellung ein und liegt unter
'Verschiedenes' in modules/by-category/23_Miscellaneous_Modules/CPAN
Folgende Dateien führen den Benutzer durch das CPAN:
ROADMAP.html
CPAN.html
modules/00modlist.long.html
comp.lang.perl.misc
verteilte)
Aufstellung sämtlicher über das CPAN verfügbaren Perl-Module. Hier
finden sich auch nützliche Tips zur Entwicklung eigener Module.
Dank des unermüdlichen Schaffensdrangs der CPAN-Entwickler entstehen
ständig neue Perl-Module. Die muß der gestreßte Systemadministrator
nicht nur installieren, sondern auch auf dem neuesten Stand halten.
Hier winkt Abhilfe: Das letzte, noch von Hand installierte Modul heißt
CPAN.pm
- danach geht alles automatisch.
Ein typisches Beispiel: In einer Fachzeitschrift steht ein interessantes Perl-Skript, das für WWW-Zugriffe
use LWP::UserAgent;
verwendet. Doch statt erhoffter Webseiten spuckt das Skript lediglich eine Fehlermeldung aus:
Can't locate LWP::UserAgent.pm in @INC at ./t line 3. BEGIN failed--compilation aborted at ./t line 3.
Klarer Fall: Das Modul fehlt dem heimischen Rechner. Zweifellos läßt es sich vom CPAN laden - doch von wo genau?
Vorausgesetzt, das Modul CPAN.pm
von Andreas König
ist fachgerecht installiert (siehe
Kasten ``Nur noch dieses eine Mal ...''), geht das automatisch. Der Aufruf
perl -MCPAN -e shell
bringt einen Kommandozeilen-Interpreter zum Vorschein, der auf die Anfrage
cpan> i /agent/
eine ganze Reihe von Treffern als eine Liste von Kurz-Beschreibungen ausgibt:
Author AGENTML (Mailing List For Perl5 Agents) Distribution JDUNCAN/Agent-2.91.tar.gz Module Agent (JDUNCAN/Agent-2.91.tar.gz) Module LWP::UserAgent Module RPC::Simple::Agent (DDUMONT/RPC-Simple-0.1.tar.gz)
Die explizite Suche nach dem Modul LWP::UserAgent
cpan> i LWP::UserAgent
hilft mit detaillierten Informationen weiter:
Module id = LWP::UserAgent DESCRIPTION A WWW UserAgent class CPAN_USERID GAAS (Gisle Aas) CPAN_FILE GAAS/libwww-perl-5.10.tar.gz DSLI_STATUS RmpO (released,mailing-list,perl,object-oriented) INST_FILE (not installed)
Demnach ist LWP::UserAgent
Bestandteil des libwww
-Bundles von
Gisle Aas, dessen aktuellste Version 5.10
auf dem CPAN
liegt. Zur Installation (diese erfordert auf den meisten Systemen
root
-Rechte, im Zweifelsfall also die Shell mit 'q' verlassen und
als root
nochmal starten) tippt man nun
cpan> install LWP::UserAgent
und die CPAN
-Shell prüft, ob eventuell schon eine Version
von LWP::UserAgent
vorliegt und installiert, falls diese veraltet ist
oder gar noch gänzlich fehlt, den neuesten libwww
-Bundle auf dem
Rechner. Hierzu lädt sie die Distribution vom eingestellten
CPAN
-Spiegel, entpackt diese, führt perl Makefile.PL
, make
,
make test
und make install
aus - und schon ist das Modul
verfügbar.
Dabei vermeidet CPAN.pm
unnötige Arbeit. Ein anschließender Versuch,
das Modul LWP::Simple
aus der
gleichen Distribution zu installieren, bricht die CPAN-Shell beispielsweise
bereits im Ansatz ab, da LWP::Simple
bereits in der neuesten Version
vorliegt:
cpan> install LWP::Simple LWP::Simple is up to date.
Hingegen erzwingt
cpan> force install LWP::Simple
den Installationsprozeß, egal, ob er nötig wäre oder nicht.
Informationen zu CPAN-Autoren erhält man entweder mittels eines regulären Ausdrucks
cpan> a /andreas/ Author id = ANDK EMAIL a.koenig@franz.ww.TU-Berlin.DE FULLNAME Andreas König
oder, falls das CPAN-Kürzel des Entwicklers bekannt ist, mit
cpan> a MSCHILLI Author id = MSCHILLI EMAIL mschilli@blacksun.com FULLNAME Michael Schilli
Um unnötigen Netzverkehr zu vermeiden, hält CPAN.pm
einen Cache
fest eingestellter Maximalgröße mit bereits geholten Distributionen und
Textdateien auf der Festplatte vor.
Nur falls letztere sich als zu alt erweisen, erfolgt der Transfer vom
CPAN-Server.
Dieses Verzeichnis legt die
Installationsroutine von CPAN.pm
fest, der Standardwert ist
.cpan
im Home-Verzeichnis des installierenden Benutzers.
Dort legt CPAN.pm
im Verzeichnis sources
einen kleinen lokalen CPAN-Spiegel an: Aktuelle Kopien der
'maschinenlesbaren'
CPAN
-Übersichtsdateien 01mailrc.gz
, 02packag.gz
und
03mlist.gz
finden sich hier. Im Verzeichnis authors/id
darunter liegen unter
den Autoren-Kürzeln die originalen komprimiert-ge'tar'ten Distributionen.
.cpan/build
beherbergt die entpackten und eventuell bereits
zur Installation vorbereiteten Builds.
Die im Artikel beschriebene CPAN-Shell benötigt das Modul CPAN.pm
.
Dies ist ein guter Zeitpunkt, um über einen Upgrade auf perl 5.004
nachzudenken. Nicht nur bietet dieser Release
ausgezeichnete Stabilität, sondern enthält auch bereits das
CPAN.pm
-Modul. Alle früheren Perl5-Versionen verlangen, die
CPAN-1.29.tar.gz
-Distribution von der CPAN (Verzeichnis
modules/by-module/CPAN
) zu holen und den bekannten Installationsprozeß
von Hand durchzuführen:
tar zxfv CPAN-1.29.tar.gz cd CPAN-1.29 perl Makefile.PL make make install
Das Kommando make install
setzt, falls die Perl-Installation wie üblich
im System-Bereich liegt, root
-Rechte voraus.
Damit CPAN.pm
Dateien von den meist auf FTP-Servern liegenden
CPAN
-Distributionen übertragen kann, benötigt es Net::Ftp
oder
eine Installation des Ascii-Browsers lynx
. Für Nicht-Unix Systeme
oder für den Fall, daß der nächstgelegene CPAN-Server kein FTP-Protokoll
fährt, sind einige LWP
-Module aus der libwww
notwendig.
Stolze perl5.004
-Besitzer stellen nur sicher,
daß sie aufs Internet zugreifen können (sonst versucht CPAN.pm
mit den wildesten Tricks Netzzugriffe, die alle fehlschlagen) und gelangen mit
perl -MCPAN -e shell
zum Installationsdialog, den von Hand Installierende nach dem
Aufruf von perl Makefile.PL
präsentiert bekommen.
Die Fragen lassen sich
meist schlicht mit einem Druck auf die Return-Taste beantworten.
Bei der Frage nach dem nächstgelegenen CPAN
-Rechner stellt
CPAN-1.29
eine Liste zur Auswahl zur Verfügung, während das der
Standard-Distribution beiligende CPAN-1.24
lediglich einen URL wissen will
(ftp://ftp.gmd.de/packages/CPAN
oder
ftp://ftp.uni-hamburg.de/pub/soft/lang/perl/CPAN
sind eine gute Wahl).
Läuft die CPAN-Shell einmal, lädt
cpan> install Bundle::CPAN
zur Steigerung des Bedienungskomforts zusätzliche Module (z.B.
Term::Readline
für den Kommandozeilen-Editor) von der CPAN und
installiert sie.
Michael Schilliarbeitet als Software-Engineer bei Yahoo! in Sunnyvale, Kalifornien. Er hat "Goto Perl 5" (deutsch) und "Perl Power" (englisch) für Addison-Wesley geschrieben und ist unter mschilli@perlmeister.com zu erreichen. Seine Homepage: http://perlmeister.com. |