Perl-Exekution unter Windows

Im Moment bin ich wie schon erwähnt dazu gezwungen, beruflich viel auf Windows zu machen. Leider knirscht es dabei an allen Ecken und Enden, wenn man wie gewohnt produktiv sein will. Eine Menge Werkzeuge fehlen einfach, mal eben schnell eine elegante Shell- oder Perl-Zeile abschicken geht nicht. Von ganzen Skripten ganz zu schweigen.

Klar gibt es mit Cygwin oder ActiveState auch die Möglichkeit, einen Werkzeugkasten auf Windows nachzuinstallieren. Aber das ist lästig, und das würde ich auch nicht auf hunderten produktiver Server bei meinem aktuellen Kunden machen wollen. Geschweige denn: dürfen.

Ich habe jetzt eine Lösung gefunden die zwar kein hundertprozentiger Ersatz für eine anständige Umgebung ist, aber die an einigen Stellen schon echt hilfreich war: PAR::Packer.

Auf meinem Arbeitsplatz habe ich ein ActiveState-Perl installiert, darin das genannte Modul. Jetzt kann ich beispielsweise folgendes eingeben:

pp -e "print time();"

Die Maschine kaut eine Weile auf dem Kommando rum und spuckt dann eine a.exe aus, die ab sofort den aktuellen Unix-Timestamp ausspuckt wenn man sie aufruft. Und das auch auf Systemen auf denen keine Perl-Umgebung installiert ist, man braucht also keine zusätzlichen DLLs oder so, nur die jeweilige EXE.

Leider ist es nicht so, dass pp das Kommando wirklich compiliert. Es ist vielmehr so, dass pp ein Archiv zusammenpackt in dem alles drin steckt was zur Ausführung des Befehls nötig ist. Die Ausgabe des entstehenden Executables ist zwar die gleiche, aber oben genanntes a.exe ist 1.844.011 Bytes groß und braucht auf meiner Kiste über eine Sekunde bevor sie wirklich ausgeführt wird. Klar, muss ja erst entpackt werden.

Die gute Nachricht ist, dass lediglich der Start so lange dauert. Das enthaltene Programm läuft — nach dem Entpacken — praktisch genauso schnell wie in einer ‚richtigen‘ Perl-Umgebung.

Wer es etwas schicker haben will kann übrigens auch direkt folgendes machen:

pp --output=timestamp.exe -e "print time();"

Und komplexe Skripte werden wie folgt gepackt:

pp --output=weltherrschaft.exe weltherrschaft.pl

Die Größe der entstehenden Datei steigt übrigens nicht derartig an dass für jede Zeile wieder 1,8MB dazu kommen. Ich habe hier ein Skript von 5.308 Bytes übersetzt, das EXE ist 2.493.292 Bytes groß. Immer noch eine Menge, aber für einen schnellen Hack ist das durchaus tauglich.

4 Kommentare

  1. Tja, die Kommandozeile unter Windows muss man schon ein wenig „pimpen“, um damit arbeiten zu können. Vielleicht hilft ja das hier:

    Unxutils (http://unxutils.sourceforge.net/), ein paar bekannte Unix-Befehle als EXE. Es kommt sogar ’ne Shell mit (zsh?).

    Vim gibt ’s auch für Windows, funktioniert auch in der Konsole.

    Damit sollte das Leben erträglicheer werden.

  2. Nun, bei diesem unxutils Paket handelt es sich schon um ein reichlich altes
    Sammelsurium, das muß man fairer Weise dazu sagen. Die zsh Version ist
    eine 3.0.5… Aber immerhin.

    Wie gut das Ding auf heutigen Systemen aus Redmond läuft kann ich mangels
    eines solchen nicht beurteilen.

  3. Ich hab‘ die mal gefunden, als ich es mir auf einem Kundenrechner gemütlich machen mußte, aber keine Rechte hatte irgendwas zu installieren. So sind die eben auf meinem Stick gelandet. sed hat mir dann auch in einer Batch das Leben gerettet. Cygwin könnte man auch portabel installieren, aber das war mir zuviel Aufwand.

    In der Not ess‘ ich die Wurst auch ohne Brot.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

;-) :-) :-D :-| :-/ :-( :-P more »