Tutorial: „Wie installiere ich mehrere Perl-Versionen auf meinem lokalen Windows-System?“

Inhalt:

Mehrere Perl-Versionen nebeneinander installieren („Multi-Perl-Installation“)

Mehrere Perl-Versionen nebeneinander installieren („Multi-Perl-Installation“)

Da es doch öfters einmal vorkommt, dass eineR mehrere Perl-Versionen braucht, weil zum Beispiel der eine Webserver mit Perl 5.6 und der andere mit Perl 5.8, gar 5.10 läuft, gibt es die Möglichkeit diese auch wirklich nebeneinander – außer mod_perl, da nur eine Perl-Version, weil diese schon beim Serverstart geladen wird! – laufen zu lassen.

Eine „Multi-Perl-Installation“ funktioniert mit den Perl-Versionen 522, 5.6.1, 5.8.8 und 5.10 von ActiveState.

Der Webserver und Perl sollten auf einem gemeinsamen Laufwerk installiert werden, damit keine Laufwerksbezeichner in Pfaden oder im SheBang angegeben werden müssen.

Vorgehensweise für eine „Multi-Perl-Installation“

Als Beispiel mit den Perl-Versionen 5.005_03, 5.6.1, 5.8.8 und 5.10 von ActiveState.

Ich gehe davon aus, dass der Webserver auf Laufwerk C: installiert wurde und dementsprechend auch Perl dort installiert werden sollte, damit die Zusammenarbeit klappt.

Es ist natürlich auch möglich, ein anderes Laufwerk zu verwenden. Dann ist in den folgenden Erläuterungen der Laufwerksbezeichner C: durch den neuen Laufwerksbezeichner aus zu tauschen.

Seitenanfang

Die verschiedenen Perl-Versionen in einzelne Verzeichnisse installieren

Vorzugsweise in solche Verzeichnisse:

C:\usr\local\perl\5.005 für Perl 5.005_03
C:\usr\local\perl\5.6 für Perl 5.6.1
C:\usr\local\perl\5.8 für Perl 5.8.8
C:\usr\local\perl\5.10 für Perl 5.10

Weitere Verzeichnisse erstellen

Die Eingabeaufforderung (DOS-Shell) aufrufen und folgendes eingeben:

mkdir C:\usr\bin
mkdir C:\usr\local\bin

Wozu diese Verzeichnisse?

Damit in Skripten der SheBang beibehalten werden kann, sind diese Verzeichnisse notwendig.

In den meisten Perl-Skripten, die auf Servern laufen, lautet der SheBang oft #!/usr/bin/perl

In diese Verzeichnisse kommen später Verweise auf die unterschiedlichen Perl-Interpreter - das sind die perl.exe.

Verweise auf Dateien auf wichtige Perl-Dateien erzeugen

Damit Perl auch laufen kann, wenn es nicht im Installationsverzeichnis aufgerufen wird, benötigt es die perl.exe und die dazugehörige perl.dll.

In dieser „Multi-Perl-Installation“ sind das die perl.exe aus den Perl-Verzeichnissen und die DLL-Dateien perlcore.dll für Perl 5.005, perl56.dll für Perl 5.6, perl58.dll für Perl 5.8 und perl510.dll für Perl 5.10.

Damit aus den zusätzlich angelegten Verzeichnissen Perl aufgerufen werden kann, müssen Verweise auf diese Dateien erzeugt werden.
Eine Verknüpfung wie sie Windows mit dem Explorer erzeugt klappt nicht, da sie sich nicht direkt auf das Dateisystem auswirkt!

Mit dem Programm ln.exe werden funktionierende Verweise (sog. Hardlinks) auf diese Dateien erzeugt.

Update: Es gibt mittlerweile auch ein Programm namens LinkShellExtension, das sich in das Kontextmenü des Windows Explorer einhängt, mit dem einfach Hardlinks erzeugt werden können.

Seitenanfang

Wie rufe ich ln.exe auf?

ln Quelle Ziel

Quelle ist dabei die Originaldatei, Ziel die Datei als Hardlink

ACHTUNG: ln.exe überschreibt gnadenlos schon vorhandene Dateien im Zielverzeichnis!

Hinweis: Hardlinks funktionieren unter Windows nur mit dem NTFS-Dateisystem!

Jetzt werden die Hardlinks erzeugt.

Dazu wieder die Eingabeaufforderung starten und folgendes eingeben:

ln C:\usr\local\perl\5.005\bin\perl.exe C:\usr\bin\perl5005.exe
ln C:\usr\local\perl\5.005\bin\perlcore.dll C:\usr\bin\perlcore.dll
ln C:\usr\local\perl\5.005\bin\perl.exe C:\usr\local\bin\perl5005.exe
ln C:\usr\local\perl\5.005\bin\perlcore.dll C:\usr\local\bin\perlcore.dll


ln C:\usr\local\perl\5.6\bin\perl.exe C:\usr\bin\perl.exe
ln C:\usr\local\perl\5.6\bin\perl.exe C:\usr\bin\perl56.exe
ln C:\usr\local\perl\5.6\bin\perl56.dll C:\usr\bin\perl56.dll
ln C:\usr\local\perl\5.6\bin\perl.exe C:\usr\local\bin\perl.exe
ln C:\usr\local\perl\5.6\bin\perl.exe C:\usr\local\bin\perl56.exe
ln C:\usr\local\perl\5.6\bin\perl56.dll C:\usr\local\bin\perl56.dll

ln C:\usr\local\perl\5.8\bin\perl58.exe C:\usr\bin\perl58.exe
ln C:\usr\local\perl\5.8\bin\perl58.dll C:\usr\bin\perl58.dll
ln C:\usr\local\perl\5.8\bin\perl58.exe C:\usr\local\bin\perl58.exe
ln C:\usr\local\perl\5.8\bin\perl58.dll C:\usr\local\bin\perl58.dll

ln C:\usr\local\perl\5.10\bin\perl510.exe C:\usr\bin\perl510.exe
ln C:\usr\local\perl\5.
10\bin\perl510.dll C:\usr\bin\perl510.dll
ln C:\usr\local\perl\5.10\bin\perl510.exe C:\usr\local\bin\perl510.exe
ln C:\usr\local\perl\5.
10\bin\perl510.dll C:\usr\local\bin\perl510.dll

Seitenanfang

Pfadangaben auf Perl aus der Umgebungsvariablen PATH löschen

In der Systemsteuerung unter SYSTEM kann die Umgebungsvariable PATH bearbeitet werden.

Alle Einträge, die auf ein Perl-Verzeichnis zeigen, sind durch die Installation von Perl erzeugt worden und müssen gelöscht werden!

Umgebungsvariable PATH erweitern

In der Systemsteuerung unter SYSTEM muss in die Umgebungsvariable PATH folgendes hinzugefügt werden:

C:\usr\bin;C:\usr\local\bin

In der Windows-Registry Einträge für die Perl-libs erstellen

Dabei gibt es mehrere Möglichkeiten, falls auf dem Rechner mehrere UserInnen arbeiten.

1. Perl darf von Allen verwendet werden

Das Programm Regedit.exe als Administrator aufrufen.

Den Schlüsselzweig \HKEY_LOCAL_MACHINE\Software\Perl suchen und unter 3. weiter machen.

2. Perl darf nur von bestimmten BenutzerInnen verwendet

Das Programm Regedit.exe als BenutzerIn aufrufen.

Den Schlüsselzweig \HKEY_CURRENT_USER\Software\Perl suchen
Fall dieser noch nicht existiert, muss er angelegt werden.

3. In den erzeugten Schlüsseln Werte hinzufügen

Die Werte sind Zeichenfolgen, also vom Typ REG_SZ.

Name Wert
lib-5.00503 C:\usr\local\perl\5.005\lib
sitelib-5.00503 C:\usr\local\perl\5.005\site\lib
lib-5.6.1 C:\usr\local\perl\5.6\lib
sitelib-5.6.1 C:\usr\local\perl\5.6\site\lib
lib-5.8.8 C:\usr\local\perl\5.8\lib
sitelib-5.8.8 C:\usr\local\perl\5.8\site\lib
lib-5.10.0 C:\usr\local\perl\5.10\lib
sitelib-5.10.0 C:\usr\local\perl\5.10\site\lib
lib C:\usr\local\perl\lib
sitelib C:\usr\local\perl\site\lib

Die Bezeichnungen der libs richten sich nach der Perl-Version.
Bei Perl 5.6.1 wird also das Ganze zu lib-5.6.1 und bei Perl 5.10.0 zu lib-5.10.0
Das muss unbedingt beachtet werden, sonst findet ActiveStates Perl nicht die Verzeichnisse für Module und läuft dann nicht.

Seitenanfang

Weitere Fragen

Was ist bitte „Multi-Perl-Installation“?

„Multi-Perl-Installation“ ist einfach eine Bezeichnung, damit die Vorgehensweise einen Namen bekommt. Ich hätte es auch anders nennen können.

Sollte die Bezeichnung „Multi-Perl-Installation“ irgendwelche Rechte verletzen, bitte ich um eine Nachricht; ich werde das dann unverzüglich ändern.

Wie lauten jetzt meine SheBangs in den Skripten für die verschiedenen Perl-Versionen?

Die SheBangs in den Skripten lauten für die verschiedenen Versionen:

#!/usr/bin/perl für das Standard-Perl (hier Perl 5.6)
#!/usr/bin/perl56 für Perl 5.6
#!/usr/bin/perl5005 für Perl 5.005
#!/usr/bin/perl58 für Perl 5.8
#!/usr/bin/perl510 für Perl 5.10

Wieso kann ich die Skripte und Batchdateien aus dem installierten Perl nicht mehr aufrufen?

Das liegt daran, dass die Verzeichnisse der unterschiedlichen Perl-Versionen nicht mehr im Suchpfad sind.

Zum Aufruf diese Batchdateien/Skripte eine eigene Batchdatei schreiben, in der vor Aufruf der Batchdatei/des Skripts die Umgebungsvariable PATH auf das dazugehörige Perl-Verzeichnis gesetzt wird.

Kann ich die Umgebungsvariablen PERLLIB und PERL5LIB verwenden?

Ja und Nein.

Diese Umgebungsvariablen lassen sich nur global setzen. Das führt aber dazu, dass alle Perl-Versionen diese dann auslesen und auf ein und dasselbe lib-Verzeichnis zugreifen. Das gibt Probleme, weil Module und Perl-Interpreter nicht zusammen passen.

Seitenanfang

Wie findet Perl dann die eigenen Module?

ActiveStates Perl liest die Windows-Registry aus.

Unter \HKEY_CURRENT_USER\Software\Perl bzw. \HKEY_LOCAL_MACHINE\Software\Perl können Einträge vorhanden sein, die nach folgendem Schema gebildet werden:

lib-PERLVERSION für das lib-Verzeichnis
sitelib-PERLVERSION für das site\lib-Verzeichnis

Anstelle von PERLVERSION steht dann die jeweilige Versionsnummer.

Hinweis: Leider hat ActiveState beim Sprung von ActivePerl 522 auf 5.6 und höher die Nummerierung geändert.
Während für ActivePerl 522 dort 5.005_03 stehen sollte, muss für ActivePerl 5.6.1 dort 5.6.1 und für ActivePerl 5.8.3 dort 5.8.3 stehen; dasselbe gilt auch für 5.10.

Wieso klappt das nicht mit Perl ActivePerl 5.6 und 5.8 oder 5.10?

Aus irgendeinem Grund liest Active Perl ab 5.8 die Registry anders aus. Deswegen müssen, die wie unter „In der Windows-Registry Einträge für die Perl-libs erstellen“ beschriebenen Einträge etwas anders lauten.

Beispielsweise ab ActivePerl Version 5.6.1 nur diese beiden Einträge für die lib:

lib-5.6.1 C:\usr\local\perl\5.6\site\lib;C:\usr\local\perl\5.6\lib
sitelib-5.8.8 C:\usr\local\perl\5.8\site\lib;C:\usr\local\perl\5.8\lib

Es dürfen also für die 5.6 kein sitelib- und für die 5.8 kein lib-Eintrag vorhanden sein.
Dasselbe gilt auch für die 5.10.

Irgenwie klappt’s nicht, was nun?

Bei weiteren Fragen bin ich gerne bereit, wenn es meine freie Zeit zuläßt, auch noch ein bisschen weiter zu helfen, solange es nicht den Umfang sprengt.

Zu erreichen bin ich unter info@gwendragon.de.

Vorteile der „Multi-Perl-Installation“

Besondere Vorteile bietet eine Entwicklungsumgebung, in der mehrere Perl-Versionen unabhängig voneinander laufen können.

So mancher Ärger und unnötige Mehrarbeit beim Programmieren, wenn das Perl des Servers sich von dem des Entwicklungssystems unterscheidet, können so vermieden werden. Das spart Kraft, Zeit und im professionellen Bereich oftmals viel Geld.

Seitenanfang

Nachteile der „Multi-Perl-Installation“

Natürlich sollen die kleinen, aber nicht unwesentlichen Nachteile nicht verschwiegen werden.

Download von benutzten Programmen

Das Program ln.exe zur Erzeugung von Hardlinks gibt es im Paket lstools unter http://www.losoft.de/download/ls-tools.zip
Nur unter Windows NT, 2000, XP mit NTFS-Dateisystem

Das Programm LinkShellExtension für die einfache Verwendung bei Hard- und Softlinks im Windows Explorer
http://schinagl.priv.at/nt/hardlinkshellext/hardlinkshellext.html
Nur unter Windows NT, 2000, XP, Vista mit NTFS-Dateisystem

Seitenanfang

Support

Ich liefere keinen Support für diese Art der Vorgehensweise.
Schäden und Probleme, die dadurch entstehen, liegen in der Verantwortung der Anwender, welche dieses Tutorial verwenden!

Stand: 03.10.2008