3

現在、WebUI を使用する Perl プログラム内で、一連のカスタム perl モジュール、test.pm をその 1 つとして使用しようとしています。Apache2 がインストールされた Windows 7 マシンで実行しています。perl test.pl を使用して cmd プロンプトでプログラムを実行すると、プログラムは正常に実行されます。ただし、Apacheで実行すると、このエラーが発生します。

[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm
[Wed Jun 13 16:23:32 2012] [error] [client 127.0.0.1] BEGIN failed--compilation aborted at C:/www/hello2.pl line 7.\r, referer: http://localhost/ui_test.htm

利用した:

foreach $key (sort keys(%ENV)) {
  print "$key = $ENV{$key}<p> \n";
}

パス変数の下に、すべてのモジュールが配置されているフォルダーが表示されます。Perl パスに追加するために使用する必要がある他の場所はありますか?

さらに、use lib "C:\testpm\"; を追加します。私のコードでは、 @INC を次のように変更するだけです

(@INC contains: C:\testpm\ C:/Perl/lib C:/Perl/site/lib .)

Apache サーバーでカスタム Perl モジュールを実行するためのパスを追加するために、他に何かする必要がありますか?

回答に基づく解決策: これが最も効果的であることがわかりました。httpd-perl.conf ファイル内に、次の行を追加しました。

<IfModule env_module>
    SetEnv PERL5LIB "C:\testpm;C:\testpm1;"
</IfModule>

(C:\testpm1 で拡張され、同様の質問を持つ人々にさらにモジュール フォルダーを追加する方法を示します。)

4

2 に答える 2

3

PATH 環境変数は、perl がモジュールをどこからロードするか、つまり @INC とは無関係です。パスが @INC にあると言いましたが、表示されるエラー メッセージではそうではありません。

Can't locate test.pm in @INC (@INC contains: C:/Perl/lib C:/Perl/site/lib .) at

use libサーバーの起動時に呼び出す必要があります。http://perl.apache.org/docs/2.0/user/handlers/server.html#Startup_Fileを参照してください。

また、末尾のスラッシュを削除してみてくださいuse lib 'C:\testpm'

于 2012-06-14T00:46:20.127 に答える
1

セットアップ ファイルに追加できる場合は、 libを使用することをお勧めします。それ以外の場合は、すべての perl スクリプト ファイルに追加する必要があります。これを行う代わりに、PERL5LIB環境変数を使用できます。

perl の@INCは、 PERL5LIB環境変数から取得できるのではなく、 PATH環境変数の値を取得しません。

Apache 構成にディレクティブを追加できます。perl スクリプトは、perl スクリプトの実行中に元の@INCSetEnv PERL5LIB path_to_modules_directoryの前にこのパスを追加します。

于 2012-06-14T10:04:53.593 に答える