Perlスクリプトを他の実行可能ファイル(* .exeファイル)と同じように動作させたい。
myscript.pl
をダブルクリックすると、テキストエディターで開くのではなく、実行する必要があります。myscript.pl
ではなくPerl myscript.pl
を実行したい。myscript.pl
ではなくmyscript
を実行したいのですが。program | myscript
ではなくprogram | Perl myscript.pl
を実行したい。これらすべてを機能させるには、Windowsで行う必要のある変更がいくつかあります。ユーザーは通常、1つずつ機能しないものにつまずきます。エラーが発生したのか、Perlにバグがあるのか、Windowsにバグがあるのか、彼らが望んでいる振る舞いが不可能であるのか、彼らを混乱させます。この質問は、すべてを前もって機能させるための単一の参照点を提供することを目的としています。これらの問題が発生する前でも理想的です。
関連する質問:
注:以下のアクションには管理者権限が必要です。コマンドプロンプトを使用する手順については、Windows Vista/Windows 7で[管理者として実行]から起動する必要があります。
シェルプロンプトで次のコマンドを実行します。
assoc .pl=PerlScript
ftype PerlScript=C:\bin\Perl.exe "%1" %*
C:\Perl\bin\Perl.exe
をPerlインストールへのパスに置き換えます。これにより、myscript.pl
の代わりにPerl myscript.pl
を実行できます。
デフォルトのインストール場所は次のとおりです。
C:\Perl
C:\Strawberry
.PL
をPATHEXT環境変数に追加します。これにより、WindowsはPATHを検索するときに* .plファイルを実行可能と見なします。 myscript.pl
の代わりにmyscript
を実行できます。
現在のcmdセッションに設定できます
set PATHEXT=%PATHEXT%;.PL
恒久的に設定するには(Windows VistaまたはWindows 7の場合)
setx PATHEXT %PATHEXT%;.PL
Windowsでは、XP GUIを使用する必要があります。
;.PL
を追加します。I/Oリダイレクション(program | myscript
など)は、ファイルの関連付けを介して開始されたプログラムでは機能しません。問題を修正するためのレジストリパッチがあります。
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
InheritConsoleHandles
REG_DWORD
Decimal
1
警告:原則として、これはWindows XPでのみ必要です。私の経験では、Windows 7でも必要です。Windows10では、これは積極的に有害です。プログラムは実行されますが、stdout/stderrには何も生成されません。レジストリキーは、1ではなく0に設定する必要があります。
以下も参照してください。
レジストリへのパッチ適用がオプションではない場合、program | Perl -S myscript.pl
を実行することで、PATH内のスクリプトの煩わしさが軽減されます。
Perlのドロップハンドラーを追加すると、ドラッグアンドドロップでPerlスクリプトを実行できます。例えばWindowsエクスプローラーのファイルアイコンの上にファイルをドラッグし、そこにドロップします。次のスクリプトを実行して、必要なエントリをレジストリに追加します。
use Win32::TieRegistry;
$Registry->Delimiter("/");
$perlKey = $Registry-> {"HKEY_CLASSES_ROOT/Perl/"};
$perlKey-> {"shellex/"} = {
"DropHandler/" => {
"/" => "{86C86720-42A0-1069-A2E8-08002B30309D}"
}};
ユーザーが実行できるようになったら、 pl2bat を使用してPerlスクリプトをバッチファイルに変換します。
このトリックはPerl -x
スイッチを介して機能し、perldoc perlrun
に従って、Perlに最初の行を#!.*Perl
のように検索させます。
受け入れられた回答の指示に従っても、Perl.exeがデフォルトのファイルハンドラーとして設定されている場合でも、ダブルクリックすると、Windows 10のメモ帳で.plファイルが開かれます。
ActivePerlでJack Wuのコメントを見つけた後。 .plファイルは実行されなくなり、代わりにメモ帳で開きます ダブルクリックでPerlスクリプトを実行することができました。
Perl5.16.3.exe
(またはインストールしたPerlのバージョンに応じて同等のもの)を選択します。ただし、notPerl.exe
)次に、.plファイルの横にPerlアイコンが表示され、ダブルクリックすると、必要に応じて毎回Perlで開くようになります。
Assocとftypeメソッドを試しましたが、うまくいきませんでした。
機能したのは、このレジストリキーの編集でした。
Computer\HKEY_CURRENT_USER\Software\Classes\Applications\Perl.exe\Shell\open\command
次のように設定されました:"C:\Perl64\bin\Perl.exe" "%1"
それがあるべき時:"C:\Perl64\bin\Perl.exe" "%1" %*
これはftypeと同じ内容ですが、難解なWindowsの理由から、そこにも設定する必要がありました。