Hatena::ブログ(Diary)

naoyaのはてなダイアリー

August 30, 2005

startup.pl で require?

use と require の話、まだ引っ張るのかよって感じですがもうちょっとだけ。del.icio.us で typester 氏からコメントがありました。

requireだけでも、startup.pl のような使い方すればいいよね?

del.icio.us/typester

んで、一瞬「そうか、startup.pl で全部 reuiqre すればいっしょなのか」と思ったんですがよく考えてみると、その場合 reuqire でロードされるのって結局 startup.pl に書いたファイルだけですよね。

この方法だと、XML::Atom みたいに中で色々使ってるモジュールとかは、その中の実装を考えて全部 require する必要が出てきます。ソースの require な部分を舐めて require するようなロジックを startup.pl に実装するってのも変な話だし。ということでやっぱり use だよなあと。

勘違いかも。

そういえば、Practical Mod-Perl に似たような話が書いてたような気がする。(こっちは use してりゃ ok ってわけでもないですよ、っていう話ですけど。) 確か CGI.pm と DBI の話だったと思います。例えば DBI だと、ドライバが実行時まで確定しないので単に use しただけだとそのコードを親子(プロセス)で共有できない、だから startup.pl の中で

use DBI;
DBI->install_driver("mysql");

とかすると共有するメモリ量が増えると。CGI.pm は

use CGI;
CGI->compile(':all');

するといいらしい。メモが出てきた。ちょっと自分メモから引用。

書籍では DBI.pm / CGI.pm にだけ言及していますが、実際にはこの手の初期化を行ってやるといいモジュールはいろいろあるそう。それぞれの pod に書いている場合もあるそうな。

Practical mod_perl、ちゃんと読むと結構パワーアップできそうなんですけどね、分厚い洋書なので腰が引ける。和訳キボン。

Practical Mod-Perl

Practical Mod-Perl

あ、ちなみにこの本ウェブで全部読めます。(CCだから和訳して公開してもいいぽだなあ...ぼそぼそ) HTML版、PDF版アリ。Shared Memory がどうたらこうたらというのはChapter 10. Improving Performance with Shared Memory and Proper Forkingにあります。

miyagawamiyagawa 2005/08/30 12:23 >その場合 reuqire でロードされるのって結局 startup.pl に書いたファイルだけですよね。
>この方法だと、XML::Atom みたいに中で色々使ってるモジュールとかは、その中の実装を考えて全部 require する必要が出てきます。

んなこたーないですよ。
> cat Foo.pm
package Foo;
require Bar;
1;
> perl -e ’require Foo’
Can’t locate Bar.pm in @INC ...

*実行時に*動的にサブクラスをロードするモジュールなんかは、たしかにそのとおりですけど、それはuseでも同じことですね。

naoyanaoya 2005/08/30 12:42 あら、そうなのか。勘違い。

そうなると startup.pl で require でもよいっていう話になるのかなあ。

asakura-tasakura-t 2005/08/30 23:15  そもそもuseてBEGIN{}で括ってrequireしてimportしてるっていう理解だったんですが、違ってます?
(なのでrequireでダメならBEGINで括ってimportすればいいんじゃないの? と思ってました)

Connection: close