
At linke perlscripts statisk
Jeg sidder og skriver på et perlscript der skal distribueres ud til en række forskellige maskiner. På CPAN findes der selvfølgelig et modul der løser en stor del af problemet, men det kræver en del andre moduler der ikke som standard følger med Perl. Havde jeg arbejdet med C eller tilsvarende kunne jeg lave en statisk linket binary og bare distribuere den. Nu har jeg valget mellem at skulle pakke og distribuere en uvis mængde af tredjepart-moduler eller genopfinde hjulet selv.
Og dog, for et stykke tid siden blev jeg introduceret for Par, the Perl Archive Toolkit. Ligesom inspirationskilden fra Java er par-filer bare en zip-fil der indeholder de perlmoduler man har brug for. Ud over at distribuere den rå par-fil kan man vælge enten at pakke den ind i et perl-script der kræver en almindelig perl-installation, eller som en binær-fil hvor selve perl-fortolkeren er linket ind.
Tager jeg et simplet 2500-tegns script og konverterer det til et script uden ikke-standard afhængigheder, ender jeg med et "script" der fylder 488K. Selvfølgelig slipper jeg for at distribuere andre moduler, men det virker nu alligevel som meget. Synderen viser sige at være modulet LWP::Simple, der alligevel er næsten standard. Udelader jeg dette kommer mit konverterede script ned på 54K, det kan jeg leve med.
Nogle perl-moduler er delvist skrevet i C og i så fald er de selvfølgelig arkitekturafhængige. Men så kan man få par til at pakke flere udgaver ned i samme par-fil. Og hvis man er lidt mere advanceret og skriver sine programmer til det kan man med Par hente manglende perlmoduler on demand og lave Java WebStart-lignende programmer.
Kommentarer (4)
Det er lidt pudsigt at se hvordan Perl, som respons på de fornuftige krav der stilles, udvikler sig mere og mere til et rigtigt programmeringssprog istedet for det quick-fix-hack-tool det var til at starte med.
Vi burde snart holde en konfirmationsfest :-)
Poul-Henning
Jeg faldt lige over en perfekt opgave til Perl. Noget filkonvertering i forbindelse med programmering af vores SMD montage automater.
Kode, Kode og vupti lå der et lille fikst script, som fungerede lige efter hensigten.
Men der er jo lige nogle hurdler som skal overståes før jeg kan give scriptet videre. For det første så skal jeg jo lige installere Perl på den windowbox hvor det skal kører. Den er fin, det kan jeg sagtens gøre. Så skal brugeren skrive en kommando i en prompt. Det er vel noget i retning af:
Perl script.pl inputfil.csv
Det er jo ikke særlig praktisk. Man kan selvfølgelig så lave en bat fil, som så ligger i søgestien. Så kan det køres som een kommando efterfulgt af een parameter. Det hjælper jo lidt på det. Jeg kan jo også køre scriptet ved bare at dobbeltklikke på det, men hvad så med min parameter?? Den bliver scriptet vel nødt til at spørge efter med path og det hele. Det er jo også upraktisk.
Jeg er selvfølgelig godt klar over at mange af det her hurdler skyldes at jeg er tvunget til at køre det på windows. Det er bare lidt ærgeligt at det skal være så relativt kompliceret at bruge det udenfor *nix verdenen for det er et godt værktøj.
Uden at have forstand på produktionsmiljøer der består af windows-maskiner, så lyder dette netop om en opgave hvor Par ville være en hjælp. Du skal selvfølgelig lige have modificeret dit script så den bruger en eller anden selector boks istedet for at læse kommandolinjen, men derefter burde du med Par kunne pakke det sammen i et stand-alone program med windowsikon og det hele.
Husk --gui flaget til pp så der ikke bliver åbnet en konsol.
Activestate har det som en del af deres: Perl Dev kit , fortæl hvor dit perl script ligger, tryk på en knap, og vupti, så har du en exe fil pakket sammen med de binaries og moduler som nu kræves.. vældig smart, og kræver ikke perl installeret på de maskiner som skal eksekvere din perl "exe" fil.
I bund og grund har de nok bare pakket par ind i en fin windows gui ;-)
