Module installieren mit der CPAN-Shell

zu den Übungsaufgaben

zur Kursübersicht

 

Vorhandene Module installieren
Ist ein Modul bereits installiert?
- versuchen es mit 'use' einzubinden --> Fehlermeldung falls nicht installiert
- s. Programm pmdesc.perl aus dem Perl Cookbook, Kap. 12.19, um einen Überblick über bereits installierte Module zu erhalten.


Wohin installiert man Module wenn man nicht Sysadmin ist?

use oder require suchen angegebene Module normalerweise in allen Pfaden, die in @INC aufgelistet sind. Kontrolle mit
perl –e 'for (@INC) {print "$_\n"}'
Beispiel-Output:

/usr/lib/perl5/5.6.0/i586-linux
/usr/lib/perl5/5.6.0
/usr/lib/perl5/site_perl/5.6.0/i586-linux
/usr/lib/perl5/site_perl/5.6.0
/usr/lib/perl5/site_perl
.

1+2: plattform-abhängige und plattformübergreifende perl-Module, die standardmäßig mitgeliefert werden
3-5: plattform-/versionsabhängige und übergreifende perl-Module, die der Systemadministrator zusätzlich installiert hat
6: aktuelles Verzeichnis

Wenn man nicht Sysadmin ist, kann man diese Verzeichnisse aber nicht ansprechen. Also bittet man entweder einen Sysadmin, das gewünschte Modul zu installieren (durchaus sinnvoll, wenn es nicht ein sehr ungebräuchliches Modul ist), oder aber man installiert das Modul in ein privates Modulverzeichnis, das man selbst bestimmt (das kostet einen dann ein bisschen Plattenplatz).


Ansprechen von Modulen in einem privaten Verzeichnis:
3 Möglichkeiten:

1) Aufruf von perl mit der Option -I, gefolgt von Verzeichnissen, wo gesucht werden soll (mehrere Verzeichnisse mit Doppelpunkt trennen). Diese Verzeichnisse werden in @INC aufgenommen. Auf Dauer ziemlich nervig.
Die Aufnahme in die Shebang-Zeile im Programm empfiehlt sich ebenfalls nicht, da die Länge dieser Zeile auf manchen Systemen begrenzt ist.

2) Nutzen des lib-Pragmas. (Pragmas sind Module, die sich bereits beim Kompilieren auswirken.)

Beispiel für den Aufruf des lib-Pragmas:
use lib "/projects/biopath/lib";

Nachteil: der Pfad steht immer noch explizit im Programmcode und muss bei Änderungen angepasst werden.


3) Setzen der Umgebungsvariablen $PERL5LIB im Shell-Konfigurationsfile
Angenommen, man installiert alle Module im Homeverzeichnis in ~/perllib/, dann sollte man in seinem c-shell- oder tc-shell-Konfigurationsfile folgenden Eintrag ergänzen:
setenv PERL5LIB ~/perllib

Syntax für sh, bash, ksh, zsh:
export PERL5LIB=$HOME/perllib 

(Vorsicht! Keine Leerzeichen vor oder nach dem Gleichheitszeichen einfügen!)

Das c-shell-Konfigurationsfile befindet sich normalerweise als '.cshrc' im Homeverzeichnis; der Eintrag sollte an einer Stelle ergänzt werden, die nicht von einer if-Bedingung abhängig ist. Vorsicht, falls ihr ein account bei den Informatikern der LMU habt!!! Dann habt ihr im Normalfall eine z-shell, und entsprechend ein Konfigurationsfile namens ".zshrc" in eurem Homeverzeichnis. Bitte verändert diese Datei nicht !!! Schreibt stattdessen in eine Datei ".zshrc_local" - falls sie nicht vorhanden ist, legt sie an und schreibt sie in euer Homeverzeichnis. Sie wird dann automatisch beim Öffnen einer neuen Shell berücksichtigt.

Die Variable $PERL5LIB kann dann praktischerweise auch beim Installieren neuer Module verwendet werden.
 

CPAN-Module installieren:

a) manuell:

Herunterladen des Moduls von www.cpan.org (am besten dirket auf www.cpan.org/modules gehen, oder über www.perl.com/CPAN/); dann
tar xvzf Some_Module_4.54

cd Some_Module_4.54
perl Makefile.PL  LIB=$PERL5LIB # falls $PERL5LIB nicht gesetzt ist: LIB=~/perllib o.ä.
make
make test
make install

Oft erfährt man dann aber bei der Installation eines Moduls, dass dieses Modul wiederum das Vorhandensein anderer Module voraussetzt, die aber noch nicht installiert sind. Also muss man erst diese anderen Module installieren, die sich aber dann eventuell wiederum über fehlende Module beschweren. Dieser Prozess kann sehr lästig werden.

Daher die nervenschonendere Möglichkeit

b) mit der CPAN-Shell

Damit die CPAN-Shell richtig funktioniert, muss in ~/.cpan/CPAN/ eine Konfigurationsdatei namens MyConfig.pm vorhanden sein. Sie sollte normalerweise schon dort liegen; andernfalls kann für die Informatik-Rechner an der LMU eine solche Datei von /home/proj/skel/.cpan/CPAN/MyConfig.pm kopiert werden.Ansonsten findet man auch Muster im Web (z.B. http://theoryx5.uwinnipeg.ca/auto/MyConfig.pm).

Den Wert zu "makepl_arg" sollte man in jedem Fall auf qq[LIB=$ENV{PERL5LIB}] setzen.

Dann kann man die CPAN-Shell wie folgt aufrufen:
perl -MCPAN -e shell

(einzugeben in der Unix-Kommandozeile; nebenbei sieht man hier, wie man Module auch als Kommandozeilenargument aufrufen kann: -M<Modulname> bindet das Modul ein).

Sofern die Konfiguration einwandfrei funktioniert hat, kann man auf wirklich sehr bequeme Art alle möglichen CPAN-Module installieren, es reicht der Befehl "install <Modulname>" innerhalb der CPAN-Shell, um das entsprechende Modul zu installieren inklusive aller eventuell dafür benötigten weiteren Module. Eine Übersicht über die möglichen Kommandos erhält man mit "help", verlassen  kann man die CPAN-Shell mit "exit". Infos über installierte und verfügbare Versionen eines Moduls erhält man mit "m <Modulname>".


Wenn ich ein Modul installiert habe, wo finde ich dann die Dokumentation dazu?

Einfach auf der Shell "perldoc Some::Module" aufrufen.



Aufgaben:

1) Installiere das Modul Lingua::EN::Inflect mit Hilfe der CPAN-Shell. Dann schreibe ein kleines Testprogramm, dass mit Hilfe des Moduls den Plural des Wortes "goose" ausgibt (Hinweis: "PL" muss explizit importiert werden).
2) Schreibe ein kleines Programm, das das Modul LWP::Simple einbindet (das Modul sollte bereits überall installiert sein) und dann folgendes tut:
- den Benutzer nach einer Webseite fragen
- den HTML-Code dieser Webseite in eine Variable einlesen (daran denken, dass zu einer vollständigen URL auch das "http://" am Anfang gehört)
Und, wenn das Einlesen erfolgreich war:
- Ausgabe des Textes ohne HTML auf den Bildschirm
Andernfalls:
- Ausgabe einer Fehlermeldung


 zur Kursübersicht