2009-04-01 10 views
12

Ho un programma Strawberry Perl che accetta un singolo file come argomento della riga di comando. Come posso impostare le cose in modo che io possa trascinare e rilasciare il file desiderato sul programma Strawberry Perl (o su un wrapper attorno ad esso) e il programma gira con il nome di quel file come argomento?Come si creano i programmi di trascinamento perl per Strawberry Perl?

+0

Credo che dipenda molto più dal sistema operativo che dal linguaggio di programmazione. Quale sistema operativo e versione stai usando? –

+2

@Jack M. - Strawberry Perl è il nuovo perl ufficiale per Windows. Il sistema operativo è quindi implicito nella mia domanda per (presumo) chiunque conosca la risposta. – skiphoppy

+0

@Jack M: ooohhh, brilla! – belgariontheking

risposta

20

In Windows (testato con XP), è possibile creare un file .cmd e semplicemente eseguire il programma Perl con l'argomento di% 1 per passare il nome file sopra, come se fosse eseguito da riga di comando.

perl c:\test.pl %1 

Quindi è sufficiente trascinare e rilasciare un file sul file .cmd da eseguire.

+0

Puoi anche rilasciare questo file nella cartella "invia a" e puoi quindi fare clic con il pulsante destro del mouse su "-> invia a" nella shell. –

+0

Frakkle, tu sei l'uomo! Domanda successiva: come posso fare in modo che la finestra della console non si chiuda immediatamente dopo aver visualizzato l'output? :) – skiphoppy

+0

Robert, grazie; Ho un collega che voleva farlo funzionare in questo modo. – skiphoppy

18

Eeek! Si prega di non creare uno script wrapper/cmd quando non è necessario.

Vai nel tuo Registro di sistema o la vostra finestra di dialogo Tipo di file in Windows, e ridefinire l'azione predefinita Perl dire:

"C:\path-to-perl-folders\perl.exe" "%1" %* 

Ciò causerà un doppio clic sul .PL per lanciare perl.exe con il nome del file doppio clic (% 1). Il materiale% * (passando gli argomenti del nome file allo script Perl) è più complicato.

Torna al registro di nuovo (in realtà, non è così spaventoso come la gente pensa) e trova/crea una chiave "shellex" sotto la classe Perl, quindi crea una sottochiave chiamata "DropHandler" con un valore di stringa predefinito di "{86C86720-42A0-1069-A2E8-08002B30309D}" (almeno, questo è il mio DropHandler nella versione USA di Windows XP).

Ciò consente ai file .pl (in realtà, qualsiasi cosa associato alla classe Perl) di avere un gestore di drop che indichi a Explorer cosa fare quando si rilasciano file sullo script .pl. In questo caso, significa semplicemente "eseguire lo script Perl con i file rilasciati come argomenti".

Hmmm, non penso di averlo spiegato molto bene, ma è così che ho impostato Perl (che scappa da un'unità di rete) per una grande organizzazione di ingegneria. Google per Perl e DropHandler, e dovresti essere in grado di ottenere lo script .reg del Registro di sistema per farlo per te.

+1

Buona chiamata! Non ero a conoscenza di questo. Ovviamente, il vantaggio del metodo di script wrapper è che è molto facile da distribuire su altre macchine. Suppongo che ci siano pro e contro per entrambi i metodi, ma questa è una soluzione interessante. – Frakkle

1

Ecco un'altra alternativa ad un "wrapper", ma richiede una leggera modifica allo script perl:

  1. Rinominare lo script script.pl a script.cmd.
  2. Aggiungere il seguente alla parte superiore del file:

@SETLOCAL ENABLEEXTENSIONS
@c:\path\to\perl.exe -x "%~f0" %*
@exit /b %ERRORLEVEL%
#!perl
#line 6
# ...perl script continues here...

Lo script viene eseguito come qualsiasi altro file batch. Le prime tre righe invocano fondamentalmente Perl sul file CMD stesso (%~f0, che funziona solo se le estensioni CMD sono attive). Il misuratore -x su perl.exe dice a Perl di saltare tutto fino alla riga #!perl. "#line 6" aiuta solo nel debug.

Questa è la mia soluzione preferita quando non so molto del sistema di destinazione (e potrebbe non essere in grado di modificare il registro).

Problemi correlati