Tutorial: „Wie installiere ich mehrere Perl-Versionen auf meinem lokalen Windows-System?“
Inhalt:
Mehrere Perl-Versionen nebeneinander installieren („Multi-Perl-Installation“)
- Vorgehensweise für eine „Multi-Perl-Installation“
- Weitere Fragen
- Vorteile dieser „Multi-Perl-Installation“
- Nachteile dieser „Multi-Perl-Installation“
- Download von benutzten Programmen
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.
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.
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
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.
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.
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.
Nachteile der „Multi-Perl-Installation“
Natürlich sollen die kleinen, aber nicht unwesentlichen Nachteile nicht verschwiegen werden.
-
Beim Aufruf von bestimmten Skripten/Batchdateien aus dem jeweiligen Programmverzeichnis einer bestimmten Perl-Version muss explizit in dieses gewechselt werden, da die Umgebungsvariable PATH nicht auf dieses zeigt
Wenn solche Skripte häufig verwendet werden, können Batchdateien geschrieben werden, welche die Umgebungsvariable PATH setzen und dann das Skript aufrufen. -
Derzeit ist es nur möglich ActiveStates Perl als „Multi-Perl-Installation“ zu verwenden.
Mit Binaries, die aus Quellcode von Perl.org und CPAN erzeugt wurden, habe ich keine Erfahrung. - Problematisch ist die immer wieder geänderte Verfahrensweise wie Activestates Perl die Einträge für die Perl-Modulpfade aus der Registry ausliest und diese dann als Modulpfade interpretiert.
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
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
© 2005 GwenDragon