tetsunosukeのnotebook

tetsunosukeのメモです

モジュールの入っていないレンタルサーバでモジュールを使いたい

http://mixi.jp/view_bbs.pl?id=3680066

モジュールが使えないレンタルサーバでは、モジュールと同程度の関数を用意しなくてはいけないって話になりかけてるから、いやいやそんなことないよ、って話。

動かしたいものをcurrent.cgiとして
http://search.cpan.org/CPAN/authors/id/D/DR/DROLSKY/Time-Local-1.12.tar.gz
からモジュールをtar.gzでゲットしてきてカレントディレクトリに展開。

すると構成は以下のようになるはず。

+ current.cgi
|
+ Time
   |
   + Local.pm

こうすれば、システムにTime::Localがインストールされていなくても
current.cgiから、use Time::LocalすればTime::Localモジュールが使えるはず。

ここでちょっと遊んでみる。
Local.pmの一行目、
package Time::Local;を、package Kidd::Local;
にしてみた。

フォルダ構成を当然、

+current.cgi
|
+ Kidd
   |
   + Local.pm

として、current.cgiのuse Time::Localを、use Kidd::Localに置き換えれば動く。

結局は@INCに含まれるパスに、フォルダ構成をモジュールのpackage文にしたがって配置すればよいわけです。

上記のフォルダ構成で動くのは

print "Content-type:text/plain\n\n";
foreach(@INC){
        print $_,"\n";
}

たぶん、ここには「.」が含まれているからなのね。

てことは、勝手に落としてきたモジュールをどこか自分の好きなディレクトリ、
たとえば、/usr/local/perl/libに置いたとしましょう。

例)/usr/local/perl/lib/Time/Local.pm

そしたら、current.cgiに以下の記述を加えればよし。

BEGIN{ push @INC, '/usr/local/perl/lib'; }


ちなみに同様にlibプラグマを使って

use lib './lib';

とかいう書き方もできます