- 追加された行はこの色です。
- 削除された行はこの色です。
* perlモジュールの検索PATHについて [#w02d09ef]
#setlinebreak(on);
まず perlの実行タイミングは、以下の2つあるらしい。
perlではモジュールを読み込むのに use や require を使うが
use と require では評価のタイミングが違う。
//※実行タイミングについては [[perlの実行タイミングについて]] を参照。
||実行タイミング|h
|use|コンパイル時|
|require|スクリプト実行時|
で、use などを使用してモジュールを読み込む際には、
@INC に設定されたPATH に従ってモジュールが検索される。
つまり MyClass.pm が カレントディレクトリ/pm 配下にある場合、
以下のコードは (1) (2) の順に実行される為、MyClass を検索できない。
(@INCが設定される前に MyClass を探しにいく為)
unshift @INC, "./pm"; # (2)
use MyClass; # (1)
以下ならOK
use lib qw(./pm);
use MyClass;
但し、mod_perl の場合はフルpath指定が必要。
use lib qw(/path/to/pm);
use MyClass;
または
BEGIN {
unshift @INC, "/path/to/MyClass"; # または /path/to/pm
}
use MyClass;
以前、[[mod_perl時の注意点]]で書いたメモで
○mod_perlでない時
×mod_perlの時
だったのは use lib qw(./pm) がmod_perlでない時だけ有効なPATHを指してした為だと思われる。
なので「 mod_perlの時はunshift、push で変更を加えた @INC(モジュール検索PATH)が使用されない 」''という事ではない''。
というか mod_perl 時は startup.pl を使って自作モジュールを読み込むのが一般的?らしい。
httpd.confの記述
PerlRequire /path/to/startup.pl
モジュールがガンガン増えていく場合
それらをstartup.plに取り込めるようなスクリプトもあるみたい。
その辺をいろいろ考えると「あまり使用しないモジュールを必要な時だけ読み込みたい」場合などは
require して import した方がいいのかなぁ。