13

Windows マシンにローカル Perl Web 環境をセットアップしました。私が取り組んでいるアプリケーションは、もともと Linux サーバーからのものであるため、ソース.plファイルのシバンは次のようになります。

#!/usr/bin/perl

これにより、Windows 開発マシンで次のエラーが発生します。

(OS 2)The system cannot find the file specified.

Windows マシンでシバンが無視されるように Apache 2 conf を変更することはできますか? もちろん、シバンを に設定することもできますが#!c:\perl\bin\perl.exe、それは明らかです。しかし、問題は更新されたファイルの展開にあります。明らかに、デプロイごとにこれを元に戻すのは非常に不便です。Windows 7 でActivePerlを使用しています。

アップデート:

スクリプトが共有ホスティング Linux 実動サーバーで機能するように、シバンを保持する必要があることを言及する必要がありました。この制約がなく、シバンを使用する必要がなかった場合、明らかな答えは使用しないことです。

4

8 に答える 8

15

#!/usr/bin/perlは自分のスクリプトで使用し、Windows で Apache を構成してシバン行を無視します。追加

 ScriptInterpreterSource Registry-Strict

Apache docshttpd.confで説明されているように、Windows レジストリ キーを設定します。

キーをエクスポートすると、次のようになります。

Windows レジストリ エディタ バージョン 5.00

[HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
@="c:\\opt\\perl\\bin\\perl.exe"

Windows ラップトップの Apache と ActiveState Perl、およびサーバーの ArchLinux に付属する Apache と Perl ディストリビューションでこのセットアップを使用しています。

Apache ドキュメント (上記でリンクしたもの) には次のように記載されています。

Apache 2.0 で新しく追加されたオプション Registry-Strict は、Registry と同じことを行いますが、サブキーのみを使用しShell\ExecCGI\Commandます。キーは一般的なものではありませんExecCGIこれは、Windows レジストリで手動で構成する必要があるため、システムでの偶発的なプログラム呼び出しを防ぐことができます。(私のものを強調)

于 2010-01-10T09:20:08.370 に答える
4

ポータブル シバン ラインはありません。同じプラットフォームとアーキテクチャーでも、誰かが perl を別の場所にインストールした可能性があります。

秘訣は、モジュールとスクリプトを手動でインストールしないことです。すべてをディストリビューションとしてパッケージ化し、モジュール ツールチェーンを使用すると、すべてのインストールに使用した perl を指すようにシバン行が自動的に変更されます。これらの詳細について考える必要はありません。:)

于 2010-01-10T11:47:23.683 に答える
3

! /usr/bin/env perl*nix でも Windows でも、すべての perl でシバンとして# を使用しています。Windows はそれを無視し、Unixen は選択された perl disto の env に従います。

于 2010-08-24T18:17:35.720 に答える
1
  1. Windows Bash フレーバー (Cygwin、MSYS2、GnuWin32 など)をインストールします。
  2. 簡単なリダイレクト シェル スクリプトを作成します。

    exec "@"
    
  3. レジストリ エントリを作成します。

    Windows Registry Editor Version 5.00
    
    [HKEY_CLASSES_ROOT\.cgi\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    
    [HKEY_CLASSES_ROOT\.pl\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    
    [HKEY_CLASSES_ROOT\.py\Shell\ExecCGI\Command]
    @="<path-to-sh> <path-to-script>"
    

    (...等々。)

  4. httpd.confファイルに書き留めます。

    ScriptInterpreterSource Registry
    

Apache は、選択した Bash フレーバーによって与えられた解釈に関連して Unix シバンを解決するようになりました。これにより、レジストリにインタープリター パスをハードコーディングするよりもはるかに柔軟になります。

于 2016-06-03T15:08:20.423 に答える
1

これを機能させる方法は、perl.exe を c:/usr/bin/ にコピーし、名前を perl に変更することでした (.exe を取り除きます)。

于 2010-02-09T08:33:25.587 に答える
0

私は手元に Windows を持っていませんが、perlcritic は次のように言っています。

my $desc = q{Found platform-specific perl shebang line};
my $expl = q{Perl source in parrot should use the platform-independent shebang line: #! perl};

だから、私#! perlはうまくいくはずだと思います。

編集: Linux では動作しません。parrot彼らがそれをどのように管理しているかはわかりませんが、どうやら で動作しているようです。

于 2010-01-10T09:21:11.723 に答える