How do I make my Perl scripts act like normal programs on Windows? How do I make my Perl scripts act like normal programs on Windows? windows windows

How do I make my Perl scripts act like normal programs on Windows?


Note: The actions below require administrative privileges. Forsteps utilizing the command prompt it must be launched via "Run asadministrator" on Windows Vista / Windows 7.

Associate *.pl files with perl

Run the following commands at a shell prompt:

assoc .pl=PerlScriptftype PerlScript=C:\bin\perl.exe "%1" %*

Replace C:\Perl\bin\perl.exe with the path to your Perl installation. Thisenables you to run myscript.pl instead of perl myscript.pl.

Default install locations are:

  • ActivePerl: C:\Perl
  • Strawberry Perl: C:\Strawberry

Add .PL to your PATHEXT environment variable.

This makes Windows consider *.pl files to be executable when searching yourPATH. It enables you to run myscript instead of myscript.pl.

You can set it for the current cmd session

set PATHEXT=%PATHEXT%;.PL

To set it permanently (under Windows Vista or Windows 7)

setx PATHEXT %PATHEXT%;.PL

Under Windows XP you have to use the GUI:

  1. Right-click My Computer, and then click Properties.
  2. Click the Advanced tab.
  3. Click Environment variables.
  4. Select PATHEXT, then click Edit.
  5. Append ;.PL to the current value.

Make I/O redirection work

I/O redirection (e.g. program | myscript) doesn't work for programs startedvia a file association. There is a registry patch to correct the problem.

  1. Start Registry Editor.
  2. Locate and then click the following key in the registry:HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
  3. On the Edit menu, click Add Value, and then add the following registry value:
    • Value name: InheritConsoleHandles
    • Data type: REG_DWORD
    • Radix: Decimal
    • Value data: 1
  4. Quit Registry Editor.

Warning: In principle, this should only be necessary on Windows XP. In my experience it's also necessary in Windows 7. In Windows 10 this is actively harmful—programs execute but produce nothing on stdout/stderr. The registry key needs to be set to 0 instead of 1.

See also:

If patching the registry isn't an option running program | perl -S myscript.plis a less annoying work-around for scripts in your PATH.

Add a drop handler

Adding a drop handler for Perl allows you to run a Perl script via drag & drop;e.g. dragging a file over the file icon in Windows Explorer and dropping itthere. Run the following script to add the necessary entries to the registry:

use Win32::TieRegistry;$Registry->Delimiter("/");$perlKey = $Registry-> {"HKEY_CLASSES_ROOT/Perl/"};$perlKey-> {"shellex/"} = {    "DropHandler/" =>  {        "/" => "{86C86720-42A0-1069-A2E8-08002B30309D}"}};


Convert your perl scripts into batch files using pl2bat once they are ready to be run by users.

The trick works through the perl -x switch which, according to perldoc perlrun, makes Perl search for the first line looking like #!.*perl.


After following the instructions in the accepted answer, a double click still led to .pl files opening with Notepad in Windows 10 — even when perl.exe was set as the default file handler.

After finding Jack Wu's comment at ActivePerl. .pl files no longer execute but open in Notepad instead I was able to run perl scripts on double-click as such:

  • Select and right-click a .pl file
  • Use the "Open With" submenu to "Choose another app"
  • Select "Always use this app to open .pl files" (do this now – you won't get the chance after you have selected a program)
  • Scroll to the bottom of the "Other options" to find "More apps", and select "Look for another app on this PC"
  • Navigate to C:/path/to/perl/bin/ and select Perl5.16.3.exe (or the equivalent, depending on which version of Perl you have installed: but not Perl.exe)

Then the Perl icon appears next to .pl files and a double-click leads to them opening in Perl every time, as desired.