PerlさんPerlくん
[perl][@INC]perlのライブラリの設定について
最終更新:
atwikimyj
-
view
ぬおおお、、なんでぇ、、ライブラリを、、読んでくれないんだよぉ!
なんで、このパスを、、読んでくれないんだよぉ!
だから、、SetEnvしてんじゃんかぁ!PERL5LIBだろぉ?
なんで、このパスを、、読んでくれないんだよぉ!
だから、、SetEnvしてんじゃんかぁ!PERL5LIBだろぉ?
- と叫び続けたあの日。
この記事は、perlのライブラリのパスと戦う人への応援歌です
(応援歌であって、必ずしもあなたの抱える問題の解決を保障しません)
(応援歌であって、必ずしもあなたの抱える問題の解決を保障しません)
perlを使うと一言で言っても、どのような状況で起動するか
によって、読みに行くライブラリが変わる、つまり@INCの
中身が変わる。
によって、読みに行くライブラリが変わる、つまり@INCの
中身が変わる。
<1> シェル(bash)からperlを起動させた場合
<2> mod_perl2から起動させた場合(Apache起動時)
<3> CGIからperlを起動させる場合(ブラウザからアクセス)
<2> mod_perl2から起動させた場合(Apache起動時)
<3> CGIからperlを起動させる場合(ブラウザからアクセス)
- もしかしたらもっとパターンはあるかもしれないが。
以下場合分けで対処をする。
<1> シェル(bash)からperlを起動させる場合
コマンドラインからの入力でperlを実行する場合。
/etc/profile
を編集し、以下を記述する。
コマンドラインからの入力でperlを実行する場合。
/etc/profile
を編集し、以下を記述する。
PERL_PATH=/usr/local
export PERL5LIB=${PERL_PATH}/lib
export PATH=${PERL_PATH}/bin:$PATH
export PERL5LIB=${PERL_PATH}/lib
export PATH=${PERL_PATH}/bin:$PATH
これで、コマンドラインからの
# perl -le 'print for @INC'
などの動作には反映される
# perl -le 'print for @INC'
などの動作には反映される
<2> mod_perl2から起動させた場合(Apache起動時)
Apacheがperlを起動させる場合、
たとえば、httpd.conf内でCatalyst関連の
ライブラリを読ませるときはperlを起動して
いるのだが、なぜか前のバージョンのperl
で使っていたと思われるライブラリパスを
読みにいっちゃう。
Apacheがperlを起動させる場合、
たとえば、httpd.conf内でCatalyst関連の
ライブラリを読ませるときはperlを起動して
いるのだが、なぜか前のバージョンのperl
で使っていたと思われるライブラリパスを
読みにいっちゃう。
解決策は、
httpconf内にライブラリのパスを記述すること。
httpconf内にライブラリのパスを記述すること。
普通考えると
SetEnv PERL_PATH "/usr/local"
SetEnv PERL5LIB "/usr/local/lib"
と書けば環境変数が変わる、、と思うのだが
これじゃだめ(涙)
SetEnv PERL_PATH "/usr/local"
SetEnv PERL5LIB "/usr/local/lib"
と書けば環境変数が変わる、、と思うのだが
これじゃだめ(涙)
試行錯誤の末、perlのライブラリがあるディレクトリすべてを
PerlSwitches -I/usr/local/lib/perl5/5.8.8
PerlSwitches -I/usr/local/lib/perl5/5.8.8/i686-linux
PerlSwitches -I/usr/local/lib/perl5/site_perl/5.8.8
と記述すると、Apacheからのperl起動時に@INCに入れてくれる
ようだ。うーん。これってバッドノウハウ?
PerlSwitches -I/usr/local/lib/perl5/5.8.8
PerlSwitches -I/usr/local/lib/perl5/5.8.8/i686-linux
PerlSwitches -I/usr/local/lib/perl5/site_perl/5.8.8
と記述すると、Apacheからのperl起動時に@INCに入れてくれる
ようだ。うーん。これってバッドノウハウ?
<3> CGIからperlを起動させる場合(ブラウザからアクセス)
具体的にはWEBサイトを開いたときにperlが起動する場合。
これは略
具体的にはWEBサイトを開いたときにperlが起動する場合。
これは略