Je veux que mes scripts Perl se comportent comme n'importe quel autre exécutable (fichier * .exe).
myscript.pl
Je veux qu'il s'exécute au lieu de s'ouvrir dans un éditeur de texte.myscript.pl
au lieu de Perl myscript.pl
.myscript
au lieu de myscript.pl
.program | myscript
au lieu de program | Perl myscript.pl
.Il y a un certain nombre de modifications que vous devez apporter à Windows pour que tout cela fonctionne. Les utilisateurs tombent généralement sur des choses qui ne fonctionnent pas une par une; les laissant confus s'ils ont fait une erreur, il y a un bogue dans Perl, il y a un bogue dans Windows, ou le comportement qu'ils veulent n'est tout simplement pas possible. Cette question est destinée à fournir un point de référence unique pour que tout fonctionne à l'avance; idéalement avant même que ces problèmes ne surviennent.
Questions connexes:
Remarque: les actions ci-dessous nécessitent des privilèges administratifs. Pour les étapes utilisant l'invite de commande, elle doit être lancée via "Exécuter en tant qu'administrateur" sous Windows Vista/Windows 7.
Exécutez les commandes suivantes à une invite du shell:
assoc .pl=PerlScript
ftype PerlScript=C:\bin\Perl.exe "%1" %*
Remplacer C:\Perl\bin\Perl.exe
avec le chemin de votre installation Perl. Cela vous permet d'exécuter myscript.pl
au lieu de Perl myscript.pl
.
Les emplacements d'installation par défaut sont:
C:\Perl
C:\Strawberry
.PL
à votre variable d'environnement PATHEXT.Cela fait que Windows considère les fichiers * .pl comme exécutables lors de la recherche dans votre PATH. Il vous permet d'exécuter myscript
au lieu de myscript.pl
.
Vous pouvez le définir pour la session cmd en cours
set PATHEXT=%PATHEXT%;.PL
Pour le définir définitivement (sous Windows Vista ou Windows 7)
setx PATHEXT %PATHEXT%;.PL
Sous Windows XP vous devez utiliser l'interface graphique:
;.PL
à la valeur actuelle.Redirection d'E/S (par exemple program | myscript
) ne fonctionne pas pour les programmes démarrés via une association de fichiers. Il existe un correctif de registre pour corriger le problème.
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
REG_DWORD
Decimal
1
Avertissement: En principe, cela ne devrait être nécessaire que sous Windows XP. D'après mon expérience, cela est également nécessaire dans Windows 7. Dans Windows 10, cela est activement nuisible - les programmes s'exécutent mais ne produisent rien sur stdout/stderr. La clé de registre doit être définie sur 0 au lieu de 1.
Voir également:
Si l'application de correctifs au registre n'est pas une option exécutant program | Perl -S myscript.pl
est une solution de contournement moins ennuyeuse pour les scripts de votre PATH.
L'ajout d'un gestionnaire de dépôt pour Perl vous permet d'exécuter un script Perl par glisser-déposer; par exemple. en faisant glisser un fichier sur l'icône du fichier dans l'Explorateur Windows et en le déposant là. Exécutez le script suivant pour ajouter les entrées nécessaires au registre:
use Win32::TieRegistry;
$Registry->Delimiter("/");
$perlKey = $Registry-> {"HKEY_CLASSES_ROOT/Perl/"};
$perlKey-> {"shellex/"} = {
"DropHandler/" => {
"/" => "{86C86720-42A0-1069-A2E8-08002B30309D}"
}};
Convertissez vos scripts Perl en fichiers batch en utilisant pl2bat une fois qu'ils sont prêts à être exécutés par les utilisateurs.
L'astuce passe par le Perl -x
interrupteur qui, selon perldoc perlrun
, fait que Perl recherche la première ligne comme #!.*Perl
.
Après avoir suivi les instructions de la réponse acceptée, un double-clic a quand même conduit à l'ouverture de fichiers .pl avec le Bloc-notes dans Windows 10 - même lorsque Perl.exe a été défini comme gestionnaire de fichiers par défaut.
Après avoir trouvé le commentaire de Jack Wu sur les fichiers ActivePerl. .Pl ne s'exécutent plus mais s'ouvrent à la place dans le bloc-notes J'ai pu exécuter des scripts Perl en double-cliquant comme tels:
Perl5.16.3.exe
(ou l'équivalent, selon la version de Perl que vous avez installée: mais pas Perl.exe
)Ensuite, l'icône Perl apparaît à côté des fichiers .pl et un double-clic les ouvre à chaque fois dans Perl, comme vous le souhaitez.
J'ai essayé les méthodes assoc et ftype et elles n'ont pas fonctionné pour moi.
Ce qui a fonctionné était la modification de cette clé de registre:
Computer\HKEY_CURRENT_USER\Software\Classes\Applications\Perl.exe\Shell\open\command
Il était défini sur: "C:\Perl64\bin\Perl.exe" "%1"
Quand cela devrait être: "C:\Perl64\bin\Perl.exe" "%1" %*
C'est le même contenu que le ftype, mais pour des raisons de fenêtres mystérieuses, j'ai dû le mettre là aussi.