Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Was fehlt?

Es liegt in der Natur der Sache: Ein Wiki ist niemals fertig. Wir geben uns große Mühe, mit der Entwicklung Schritt zu halten; lassen Supportanfragen direkt in neue Artikel einfließen … aber auch wir sind nicht perfekt. Wenn du hier nicht fündig wirst: Nicht schmollen - Bescheid sagen! Unter hallo@uberspace.de steht dir unser Team gerne bereit. Hand drauf!

development:perl

Perl

Auf unseren Servern stellen wir dir die Programmiersprache Perl in der Version 5 bereit. Wenn du die exakte Version wissen möchtest, gib bitte auf dem System, auf dem sich dein Uberspace befindet, perl -v ein.

Der Pfad zu Perl ist /usr/bin/perl. In den meisten Scripts befindet sich ohnehin diese Angabe im Kopf der Datei. Sollte hier wider Erwarten eine andere Angabe stehen, ändere jene bitte auf /usr/bin/perl, oder bitte den Autor, in der nächsten Version am besten direkt /usr/bin/env perl anzugeben, was inzwischen als der bevorzugte Weg angesehen wird.

globale CPAN-Module

Wir stellen dir eine Vielzahl von Perl-Modulen fertig installiert bereit. Die Liste der auf deinem System verfügbaren Module kannst du wie folgt einsehen:

[erich@xenon ~]$ rpm -qa | grep ^perl
perl-Digest-SHA1-2.11-1.2.1
perl-HTML-Parser-3.55-1.fc6
perl-File-Copy-Recursive-0.38-1.el5.rf
[...]
perl-rrdtool-1.4.4-1.el5.rf
perl-Test-Script-1.05-1.el5.rf
perl-Curses-1.28-1.el5.rf

Wenn dir eins fehlt, sag uns Bescheid; möglicherweise können wir es global für alle User bereitstellen. Ansonsten besteht immer die Möglichkeit, speziell innerhalb deines Uberspaces einzelne Perl-Module mittels locallib zu installieren. Auf diese Weise ist es auch möglich, neuere Versionen von bereits global installierten Modulen zu benutzen, für die wir aus offiziellen Paketquellen bisher kein Update beziehen konnten.

lokale CPAN-Module

Mit Hilfe von local::lib kannst du mit wenig Aufwand eine Umgebung einrichten, in der du selbstständig CPAN-Module installieren kannst. Es braucht einmalig einen gewissen Aufwand, denn das globale, zur Linux-Distribution gehörende Perl 5.8 bringt ein cpan mit, das für local::lib aber zu alt ist - aber auch nicht aktualisiert werden kann, weil es zum Core-RPM von Perl gehört. Aber: Alles kein Problem.

Zunächst gehe bitte auf http://search.cpan.org/dist/local-lib/ und suche dir dort die neueste Version von local::lib. Du kannst sie dann direkt in dein Home-Verzeichnis herunterladen und entpacken:

[margitta@amnesia ~]$ curl --silent --location http://search.cpan.org/CPAN/authors/id/A/AP/APEIRON/local-lib-1.008004.tar.gz | tar -xzf -
[margitta@amnesia ~]$ cd local-lib-1.008004/
[margitta@amnesia local-lib-1.008004]$ 

Anschließend folgen wir dem Abschnitt The bootstrapping technique der Dokumentation:

[margitta@amnesia local-lib-1.008004]$ perl Makefile.PL --bootstrap
Attempting to create directory /home/margitta/perl5
ExtUtils::MakeMaker version 6.31 required--this is only version 6.30.
BEGIN failed--compilation aborted.
ExtUtils::Install version 1.43 required--this is only version 1.33.
BEGIN failed--compilation aborted.
...
Checking if your kit is complete...
Looks good
Writing Makefile for local::lib

Du kannst dir währenddessen ruhig erstmal einen Kaffee machen: local::lib wird feststellen, dass ihm die Hälfte fehlt oder zu alt ist (Perl 5.8 ist immerhin schon viele Jahre alt … aber eben bei CentOS immer noch das, was als „stable“ angesehen wird). Dann, wenn's fertig ist:

[margitta@amnesia local-lib-1.008004]$ make
cp lib/POD2/PT_BR/local/lib.pod blib/lib/POD2/PT_BR/local/lib.pod
...
[margitta@amnesia local-lib-1.008004]$ make install
Installing /home/margitta/perl5/lib/perl5/lib/core/only.pm
...
Appending installation info to /home/margitta/perl5/lib/perl5/x86_64-linux-thread-multi/perllocal.pod

Jetzt kommt noch der entscheidende Schritt: Du musst in deiner .bashrc (wenn du eine andere Shell wie die zsh benutzt, dann entsprechend in deren Konfiguration) eine Zeile einfügen, nämlich diese hier:

eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)

Anschließend musst du die .bashrc neu einlesen, damit deine Umgebung aktualisiert wird (alternativ kannst du dich auch einfach neu einloggen). Die beiden Schritte wären also:

[margitta@amnesia local-lib-1.008004]$ echo 'eval $(perl -I$HOME/perl5/lib/perl5 -Mlocal::lib)' >> ~/.bashrc
[margitta@amnesia local-lib-1.008004]$ . ~/.bashrc

Das war's! Damit sind jetzt alle möglichen Umgebungsvariablen gesetzt worden - so sieht das aus, wenn du mal schnell einen Blick darauf werfen möchtest:

[margitta@amnesia local-lib-1.008004]$ set | grep perl5
PATH=/home/margitta/perl5/bin:/package/host/localhost/php- 5.3/bin:/usr/kerberos/bin:/usr/local/bin:/bin:/usr/bin:/var/qmail/bin:/opt/syslog-ng/bin:/opt/syslog-ng/sbin:/home/margitta/bin
PERL5LIB=/home/margitta/perl5/lib/perl5/x86_64-linux-thread-multi:/home/margitta/perl5/lib/perl5
PERL_LOCAL_LIB_ROOT=/home/margitta/perl5
PERL_MB_OPT='--install_base /home/margitta/perl5'
PERL_MM_OPT=INSTALL_BASE=/home/margitta/perl5

Perl ist damit nun also instruiert, innerhalb deines ~/perl5-Verzeichnisses auch nach Modulen und Programmen zu suchen. Alle Programme, die du auf der Shell ausführst, profitieren automatisch davon. Wenn du aber CGI- oder FastCGI-Scripts einsetzt, bedenke, dass der Apache-Webserver direkt Perl aufruft und nicht erst die Shell, die dann Perl aufruft - dort sind dann die Umgebungsvariablen nicht gesetzt. Aber kein Problem: Ein einfaches …

use local::lib;

… im Script selbst sorgt dafür, dass das betreffende Script automatisch auch in deinem Home-Verzeichnis nach Perl-Modulen sucht.

Cronjobs

Damit Perl-Scripts, die via local::lib installierte Module benötigen, auch unter Cron selbige finden, solltest du den Aufruf von perl myscript.pl wie folgt ergänzen ($username musst du dabei durch deinen eigenen Usernamen ersetzen):

perl -I/home/$user/perl5/lib/perl5 -Mlocal::lib myscript.pl

Danke an Helge für den Hinweis!

development/perl.txt · Zuletzt geändert: 2015/03/24 22:52 von uber