![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
||||||||
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
|||||||
![]() |
|||||||
![]() |
|
||||||
![]() |
CPANAlle Mann an die Pumpen!von Michael Schilli |
![]() |
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 |
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:
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?
Nur noch dieses eine Mal ... |
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. |
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.
Der Autor |
Michael Schilli arbeitet als Web-Engineer für AOL/Netscape in Mountain View, Kalifornien. Er ist Autor des 1998 bei Addison-Wesley erschienenen (und 1999 für den englischsprachigen Markt als "Perl Power" herausgekommenen) Buches "GoTo Perl 5" und unter michael@perlmeister.com oder http://perlmeister.com zu erreichen. |
Copyright © 1997 Linux-Magazin Verlag