2011-07-18 9 views

答えて

4

mod_perlで実行すると、サーバーが起動すると@INCはフリーズし、更新できません。 @INCを一時的に変更する唯一の機会は、スクリプトまたはモジュールが初めて読み込まれ、コンパイルされることです。その後、その値は元の値にリセットされます。 @INCを永久に変更する唯一の方法は、Apacheの起動時に変更することです。サーバーの起動時に@INCを変更する

二つの方法:設定ファイルで

  • 。例えばPerlSetEnv PERL5LIB /home/httpd/perl

  • スタートアップファイルで@INCを直接変更し、スタートアップファイルを設定ファイルから読み込みます。それはuseのために動作するかどうか、それはrequireのために働くよう

も参照してください@INC and mod_perl

+0

実際、私はそれを永続化したくありません。そのため、私は 'BEGIN'の中で' uninit @ INC'をしています。しかし、 'require'ステートメントでは機能しません。 –

+0

@new_perl 'require 'は実行時に' @ INC'がリセットされた後に発生しますので、 'require'では動作しません。 –

+0

がなぜこのように動作しますか?' BEGIN {unshift @INC、'/root/'} print "@INC"; '?? '/ root /'は実行時にまだそこにあります。 –

-1
use Foo; 

BEGIN { 
    require Foo; 
    import Foo; 
} 

と同じです。

0

はい、起動スクリプトで@INCを更新できます。しかし、あなたのモジュールで以下のコードを使用すると、簡単に動作します:

use lib '/app/my-libs'; 

少なくとも - 私のCGIアプリケーションはmod_perlで動作しています。

関連する問題