は私が 現在のソースファイルを持つディレクトリを、mod_perlのPerlで `use`と` require`文で検索する標準的な方法はありますか?
BEGIN {
unshift @INC, 'current_path_string';
}
を試みたが、それだけで、それが検索されないです
require
use
、のために働きます。
回避策はありますか?
は私が 現在のソースファイルを持つディレクトリを、mod_perlのPerlで `use`と` require`文で検索する標準的な方法はありますか?
BEGIN {
unshift @INC, 'current_path_string';
}
を試みたが、それだけで、それが検索されないです
require
use
、のために働きます。
回避策はありますか?
mod_perlで実行すると、サーバーが起動すると@INC
はフリーズし、更新できません。 @INC
を一時的に変更する唯一の機会は、スクリプトまたはモジュールが初めて読み込まれ、コンパイルされることです。その後、その値は元の値にリセットされます。 @INC
を永久に変更する唯一の方法は、Apacheの起動時に変更することです。サーバーの起動時に@INC
を変更する
二つの方法:設定ファイルで
。例えばPerlSetEnv PERL5LIB /home/httpd/perl
スタートアップファイルで@INC
を直接変更し、スタートアップファイルを設定ファイルから読み込みます。それはuse
のために動作するかどうか、それはrequire
のために働くよう
も参照してください@INC and mod_perl
use Foo;
は
BEGIN {
require Foo;
import Foo;
}
と同じです。
はい、起動スクリプトで@INCを更新できます。しかし、あなたのモジュールで以下のコードを使用すると、簡単に動作します:
use lib '/app/my-libs';
少なくとも - 私のCGIアプリケーションはmod_perlで動作しています。
実際、私はそれを永続化したくありません。そのため、私は 'BEGIN'の中で' uninit @ INC'をしています。しかし、 'require'ステートメントでは機能しません。 –
@new_perl 'require 'は実行時に' @ INC'がリセットされた後に発生しますので、 'require'では動作しません。 –
がなぜこのように動作しますか?' BEGIN {unshift @INC、'/root/'} print "@INC"; '?? '/ root /'は実行時にまだそこにあります。 –