8

私は、20 年以上一貫して機能している自分の個人的な環境を使用してきました。私は約 14 年前に多くの perl スクリプトを組み込み始めました。私は 22 年間、コマンドライン インタープリターの同じツリーを使用してきました (NDOS->4DOS->4NT->TCMD、実際にはすべて同じプログラムです)。

ActiveState windows perl から Strawberry Perl に切り替えました。

何年もの間、perl スクリプトを実行するために必要なのはこれだけでした。

SET .pl=perl

これは、どのプログラムで開くかを指定する方法です。

これは私が簡単にできることです:

c:\>test.pl
Hello, world!

うまくいきました。永遠に。

今日、1 週間前の OS では、すべてが機能しなくなりました。

Perl スクリプトは実行されますが、何もしません。エラーなし。出力なし。何もない。

これが機能する唯一の方法は、スクリプトの前に「perl」を付けることです (この場合、スクリプト名がパラメーターになっているためパスが検索されず、スクリプトのフル パスを入力する必要があります)。

これが私であることのようなものです:

C:\>test.pl

C:\>perl test.pl 
Can't open perl script "test.pl": No such file or directory

C:\>perl c:\bat\test.pl 
Hello, world!

これは昨日、今日の早い段階でも正常に機能していたことに注意してください。何がこれを変更し、何が壊れたのかはわかりません。かなり長い間調べたところ、似ているが同一ではない問題が見つかりました-修正は役に立ちませんでした.

私は大量のスクリプトを持っています。それらのすべての前に世界の「perl」を挿入し、フルパスを修飾する必要があるのは本当に嫌です!

現実的には、おそらく、パラメーター ファイル名を完全修飾パスに変換し、明示的に perl を呼び出す perl.bat ラッパーを作成する必要があります。

私は本当にそれをしたくありません。それが応急処置です。何が悪いのか、アドレスが何かを理解し、解決したい。

Windows 7が嫌いになってきました...

4

3 に答える 3

8

あなたの問題は、.pl から perl.exe への関連付けが壊れている可能性が最も高いと思います。

レジストリのHKEY_CLASSES_ROOT\.plを見てください。おそらくその下に Perl (または FOO と言います) サブノードがあります。

その場合は、HKEY_CLASSES_ROOT\Perlまたは FOOを見てください。

shell\Open\commandキーが必要です

これは次のようになります

  "C:\Perl\bin\perl.exe" "%1" %*

もちろん、システム上の perl.exe パスは異なる場合があります。%*は、スクリプトに渡す引数を perl.exe に渡す重要なビットです。

したがって、コマンド ウィンドウで「test.pl foo bar」を実行すると、裏でシェルが実際に呼び出しています。

C:\perlpath\perl.exe C:\scriptpath\test.pl foo bar.

この種の問題は、単に Windows エクスプローラーで *.pl ファイルを選択し、それを perl.exe に関連付けようとしたときに発生します。

追加のボーナスとして、.PL を PATHEXT 環境変数に追加すると、test.pl を指定する必要さえありません。単にパスの最初にある場合、 testは test.pl を呼び出します:)

于 2011-05-27T12:21:40.033 に答える
2

Windows Powershell

Windows Powershell で、.PL を PATHEXT 環境変数に追加します (そうしないと、スクリプトは別の CMD ウィンドウで実行されます)。

ただし、Powershell は、コマンドが PATH にない限りコマンドを実行しません (つまり、"." はデフォルトで $env:PATH になく、Unix のルートに少し似ています)。

したがって、スクリプトを実行するには

./script 
./script.pl

最も簡単な方法は、Powershell プロファイルを使用することです。

例: C:\Users\username\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

$env:PATH   = "C:\strawberry\perl\bin;$env:PATH"
$env:PATHEXT    = "$env:PATHEXT;.PL"

./ を実行する必要がないようにするには (これはセキュリティ リスクであることに注意してください)、「.」を追加します。パスへ (引用符なし)

$env:PATH   = "C:\strawberry\perl\bin;$env:PATH;."

それからあなたはただすることができます

script
于 2013-03-30T10:13:44.853 に答える
1

ファイル拡張子の関連付けを確認するには、.plファイルを右クリックして を選択しproperties、[プログラムから開く] ボタンをクリックします (これは XP です。Windows 7 でどのように表示されるかはわかりません)。拡張機能が間違った場所を指している可能性があります。

于 2011-05-27T12:56:10.400 に答える