Tags:
create new tag
, view all tags

Wie man mehrere Perl-Versionen nebeneinander betreibt

System-Perl

Auf jedem Unix-System befindet sich bereits eine Version von Perl. Ohne Perl würde keine Unix-Installation vernünftig funktionieren. Für Entwickler ist es aber mühsam, weil nicht einfach so auf die Schnelle ein CPAN-Modul eingefügt werden kann (dazu sind root-Rechte notwendig). Oft sind auch die vorhandenen Module veraltet und können nicht ohne grösseren Aufwand aktualisiert werden. Kommt hinzu, dass die installierte Perl-Version je nach Alter des Betriebsystem immer noch z.B. bei 5.8.8 ist, während die aktuelle Perl-Version (2015) bereits die Version 5.22 aufweist. Jedes Jahr wird eine neue Version von Perl herausgegeben, wobei gerade Versionsnummern jeweils eine stabile Version darstellen: 5.10, 5.12, 5.14, 5.16 etc. Die ungeraden Versionsnummern sind Entwicklerversionen.

Brauchbare Doku im Internet gibt es hier

mit perlbrew eigene Perl-Version installieren

Seit perlbrew ist es sehr einfach geworden, eine vom System unabhängige Perl-Version zu installieren und zwischen den installierten Perlversionen zu wechseln:

Lädt perlbrew herunter und installiert es. Nachdem man seine lokale .bashrc Datei mit der Zeile

  • source ~/perl5/perlbrew/etc/bashrc

ergänzt hat, ist man eigentlich ready to go.

  • perlbrew list

Listet die aktuell auf dem System vorhandenen Perl-Versionen auf.

  • perlbrew available

listet die verfügbaren Perl-Versionen auf.

  • perlbrew install perl-5.16.3
  • oder mit vielen Zusatzfunktionen:
  • install perl-5.16.3 -Dusethreads -Duselargefiles -Accflags=-fPIC -Dcccdlflags=-fPIC -Duse64bitall -Dpager/usr/bin/less -Doptimize=-O2=

installiert die Perl Version 5.16.3 im Verzeichnis ~/perl5/perlbrew/perls/perl-5.16.3. In der Regel dauert das eine Weile, weil Millionen von Tests durchgeführt werden.

  • perlbrew use perl-5.16.3

Setzt das Perl in der momentanen Arbeits-Shell auf diese Version. Mit

  • perlbrew switch perl-5.16.3

wird die Perlversion bei jedem Login auf diese Version gesetzt.

  • perlbrew help

listet noch ein paar weitere Optionen auf.

Einfachere Alternative zu cpan: cpanm (App::cpanminus)

Installieren: perlbrew install-cpanm

Das Standard cpan-Programm, welches mit Perl mitgeliefert wird, ist zwar schön und gut aber leider alles andere als schnell. Wenn Modul-Abhängigkeiten detektiert werden, kann es schon sehr lange dauern, bis das Modul installiert ist. App::cpanminus macht alles ganz einfach und stellt ein kleines Utility namens cpanm zur Verfügung:

cpanm Mein::Modul

installiert Mein::Modul und alle zusätzlich benötigten Module. Die Module werden nicht im Pfad des System-Perl abgelegt, sondern jeweils unter ~/perl5/perlbrew/perls/perl-5.16.3/ (oder wo auch immer das aktuell gewählte Perl sich befindet)

Perl Upgrade: Installierte CPAN-Module auflisten

Wenn man mit perlbrew eine neue Perl-Version installiert (z.B. 5.18.4), werden leider nicht automatisch auch noch alle bereits installierten CPAN-Module neu installiert. Man muss daher zuerst ExtUtils alle installierten CPAN-Module auflisten und in ein File schreiben, etwa so:

#!/usr/bin/env perl

use v5.16;
use ExtUtils::Installed;

my ($inst) = ExtUtils::Installed->new( skip_cwd => 1 );
my (@modules) = $inst->modules();

open my $file, '>', 'my_installed_cpan_modules';
say $file $_ for @modules;
close $file;

Mit perlbrew switch perl-5.18.4 wechselt man anschliessend zur neuen Perlversion wechseln und mit cat my_installed_cpan_modules | cpanm diese Module installieren.

Module deinstallieren

Manchmal möchte man aufgrund z.B. eines Namenskonfliktes ein Modul deinstallieren:

  • pm-uninstall Mein::Modul

Alle CPAN-Module aktualisieren

Ein weiteres praktisches Tool nennt sich cpan-outdated. Es sucht nach allen installierten Perl-Modulen und vergleicht mit dem CPAN-Server, ob eine aktuellere Version vorhanden ist. Mit dem Befehl

  • cpan-outdated -p | cpanm

werden gleich alle installierten CPAN-Module auf einen Schlag auf den aktuellsten Stand gebracht.

Bekannte Library-Abhängigkeiten

Einige Perl-Module benötigen für die Installation zusätzliche Bibliotheken (Libraries) inklusive deren Header-Files. Folgende Pakete sind bekannt, dass sie in der -devel - Version installiert sein müssen (zum Beispiel mit yum), bevor das ensprechende Perl-Modul installiert werden kann:

  • expat-devel (für XML::Parser)
  • gmp-devel (für Math::BigInt::GMP)
  • mysql-devel (für DBD::mysql)
  • libqrencode (für QR-Codes)
  • oracle-instantclient11.1-devel (für DBD::Oracle)
  • libsmbclient

Wie man das CPAN-Modul DBD::Oracle installiert, kann man hier nachlesen.

Abhängigkeiten von anderen CPAN-Modulen

Weil es so einfach ist, mit cpanm neue CPAN-Module zu installieren, steigt auch die Wahrscheinlichkeit, dass man irrtümlicherweise ein Modul installiert, welches in Konflikt mit eigenen Modulen kommt, so beispielsweise Email::Address. Mal abgesehen davon, dass die eigenen Module sowieso in einen separaten Namespace hingehörten, kann man mit dem Web-Service unter http://deps.cpantesters.org/ im Voraus die Abhängigkeiten eines Moduls testen.

crontab PATH

  • crontab editieren: ~/conf/crontab
  • PATH=/instances/home/ndev0/perl5/perlbrew/bin:/instances/home/ndev0/perl5/perlbrew/perls/perl-5.16.3/bin: setzen
  • cronjob neu starten: start_crontab respektive restart_crontab

-- SwenVermeul - 2015-05-27

Topic revision: r24 - 2016-07-13 - SwenVermeul
 
This site is powered by the TWiki collaboration platform Powered by PerlCopyright © 2008-2017 by the contributing authors. All material on this collaboration platform is the property of the contributing authors.
Ideas, requests, problems regarding TWiki? Send feedback