2012-08-06 9 views
5

Tradizionalmente, avrei solo C:\perl\bin nella mia variabile PATH, ma a causa di conflitti di versione mi piacerebbe mantenere diverse versioni perl nelle posizioni C:\Perl-versionXY\bin e semplicemente eseguire i miei script Perl invocando direttamente C:\Perl-...\bin\perl.exe theScript.pl.Ho bisogno della directory Perl bin nel PATH per eseguire programmi perl (su Windows)?

Questo è in realtà da eseguire in un sistema automatizzato, dove già inviamo direttamenteC:\perl\bin\perl.exe per tutti gli script perl. (Ma C:\perl\bin è anche nel PATH.)

Per facilitare diverse versioni di Perl side-by-side, mi piacerebbe rimuovere C-perl-bin dal PATH per assicurarsi che non lo facciamo mai vedere effetti collaterali da qualsiasi impostazione PATH relativa al Perl.

è questo dovrebbe lavorare? Che dire dei moduli che richiedono file DLL aggiuntivi (come LibXML, che richiede LibXML.dll nella directory bin di perl) ??

sarò con Strawberry Perl portatile per il lato dalle versioni laterali. (Il file readme menziona alcune impostazioni PATH, ma non menziona quale è utilizzato per cosa.)

+0

Forse cercavi 'C: \ bin \ perl', perché questo renderebbe molto più senso –

+1

@johncorbett: il motivo per cui vorrei che più senso? Windows non è unix, quindi non ha c: \ bin. C: \ perl \ bin rende perfettamente senso, secondo me – pavel

+0

Haha, penso che Unix è solo così forato nella mia testa, anche su Windows che uso cygwin –

risposta

1

condizione che tutte le DLL sono nella stessa directory del file eseguibile, dovrebbe funzionare normalmente. Se nel percorso è presente solo una voce per Perl, le DLL devono trovarsi nella stessa directory dell'eseguibile (oppure vengono trovate utilizzando una logica esplicita), quindi è necessario essere a posto. Quando un eseguibile carica una DLL, il primo posto cercato è la directory contenente l'eseguibile.

Se non esegue in difficoltà, una possibilità potrebbe essere quella di creare un file di comando per ogni versione. Potresti dare questi nomi diversi, come perl58.cmd, perl514.cmd, ecc., Metterli tutti in un'unica directory e posizionare quella directory sul percorso. In ogni file di comando, aggiungere la directory Perl corrispondente al percorso e poi lanciare il Perl con gli argomenti della riga di comando:

setlocal 
PATH=c:\perl58\bin;%PATH% 
perl %* 

Nota uso del comando setlocal in modo che la modifica al percorso non viene esportato indietro al dalla finestra della riga di comando da cui viene eseguito il file di comando.

0

Vorrei fare attenzione che se non si dispone della directory bin Perl sul PATH, e qualsiasi cosa che si esegue tenta di richiamare programma che vive nella directory bin senza fornire un percorso esplicito (cattiva pratica, ma che non impedisce che accada), quindi si ottiene un errore e, a seconda di come viene gestito tale errore, potrebbe manifestarsi in problemi che sono difficili e difficili da debug.

Quindi dico, a meno che non si abbia una ragione molto convincente per non aggiungerlo (ad esempio, politica IT che rende proibitivo e fastidioso aggiungere a PATH), quindi aggiungerlo.

+0

Bene, se ho due versiin perl, uno dice 5.8 e uno 5.14, posso solo aggiungere significativamente uno di questi al percorso (globale). Sarebbe il percorso sbagliato per l'altra versione. Quindi non sembra avere alcun senso aggiungerlo al percorso (globale) e sarebbe più facile non averlo nel percorso piuttosto che essere richiesto per impostarlo dipendente dal contesto. –

+1

È prassi comune sui sistemi Unix eseguire il wrapping degli eseguibili con script di shell che configurano l'ambiente in cui verrà eseguito l'eseguibile. C'è un motivo per cui non puoi racchiudere le invocazioni dei tuoi programmi perl negli script batch o powerShell? –

Problemi correlati