mod_perl 環境下の require されたモジュールのライフサイクル
sunlight さんの実験 を読んで,use(コンパイルフェーズで評価される)ではなく,require & import(実行フェーズで評価される)の場合はどのようになるのだろうと思って追試をしてみました。
同じようなモジュール構成で,
- mod_perl2
- PerlInitHandler Apache2::Reload
- PerlResponseHandler ModPerl::PerlRun
な環境限定でたしかめてみました。
結果は,細かいところで違うものの,基本的には use と同じでした。
細かいところというのは,use だと,初回実行時に
/Module BEGIN /Module RUN /Main BEGIN /Main RUN /Module SUB /Main END
となるところが,require だと
/Main BEGIN /Main RUN /Module BEGIN /Module RUN /Module SUB /Main END
のように Main でのコンパイルが先行するところです。これは実行フェーズでコンパイルが行われるのであたりまえといえば当たり前です。
なぜたしかめたのかというと,ダイナミックロードしたくて,でも require の場合にも,モジュールが変更されたことを Apache2::Reload が検知してくれるのかなぁ?という疑問からでした。結果は,問題なし,ということで,めでたしめでたしです。