Comment créer des programmes de Perl à la fraise?

j'ai un programme Strawberry Perl qui accepte un fichier unique comme argument en ligne de commande. Comment puis-je configurer les choses de telle sorte que je puisse faire glisser et déposer le fichier désiré sur le programme Perl de fraise (ou un wrapper autour de lui) et le programme tourne avec le nom de ce fichier comme argument?

12
demandé sur brian d foy 2009-04-01 18:44:09

3 réponses

sous Windows (testé avec XP), vous pouvez créer un .le fichier cmd et le faire simplement exécuter le programme Perl avec l'argument %1 pour passer le nom du fichier, comme s'il était exécuté par ligne de commande.

perl c:\test.pl %1

, Alors vous pouvez simplement faire glisser et déposer un fichier sur le .fichier cmd à exécuter.

20
répondu Frakkle 2009-04-01 14:57:36

Eeek! S'il vous plaît ne créez pas un script de wrapper/cmd quand vous n'en avez pas besoin.

allez dans votre registre ou dans la boîte de dialogue Type de fichier dans Windows, et redéfinissez L'action Perl par défaut pour dire:

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

cela provoquera un double-clic sur le .PL to launch perl.exe avec le nom du fichier double-cliqué (%1). Le truc de % * (passer n'importe quel argument de nom de fichier au script Perl) est plus compliqué.

aller dans le Registre encore une fois (en fait, ce n'est pas aussi effrayant que les gens le pensent) et trouver/créer une clé "shellex" sous la classe Perl, puis créer une sous-clé appelée "DropHandler" avec une valeur par défaut de chaîne de caractères de "{86C86720-42A0-1069-A2E8-08002B30309D}" (au moins, c'est mon DropHandler dans la version américaine de Windows XP).

cela permet .les fichiers pl(en fait, tout ce qui est associé à la classe Perl) pour avoir un gestionnaire de goutte qui dit à L'Explorateur ce qu'il faut faire lorsque vous déposez le (S) fichier (s) sur le .PL script. Dans ce cas, il signifie simplement "exécuter le script Perl avec le fichier déposé(s) comme arguments".

Hmmm, Je ne pense pas que j'ai très bien expliqué, mais c'est comme ça que J'ai mis en place Perl (running off a network drive) pour une grande organisation d'ingénierie. Google pour Perl et DropHandler, et vous devriez être en mesure d'obtenir le .reg script de Registre pour faire cela pour vous.

18
répondu jimtut 2009-04-01 16:38:28

Voici une autre alternative à un "wrapper", mais elle nécessite une légère modification au script perl:

  1. renommez votre script.pl du scénario au scénario.cmd.
  2. ajouter ce qui suit en haut du fichier:

@SETLOCAL ENABLEEXTENSIONS

@c:\path\to\perl.exe -x "%~f0" %*

@exit /b %ERRORLEVEL%

#!perl

#line 6

# ...perl script continues here...

le script est exécuté comme n'importe quel autre fichier batch. Les trois premières lignes invoquent essentiellement Perl sur le fichier CMD lui-même ( %~f0 , qui ne fonctionne que si les extensions CMD sont activées). Le -x paremeter à perl.exe dit à Perl de tout sauter jusqu'à la ligne #!perl . " #line 6 " juste sida dans le débogage.

C'est ma solution préférée quand je ne sais pas beaucoup de choses sur le système cible (et peut ne pas être en mesure d'éditer le registre).

1
répondu ijprest 2009-06-29 01:33:35