requireとuse
なんか、Perlにはモジュールをロードするのに「require」と「use」があるが、最近は「use」が主流だけどPerl4の時は「require」でやってたよね。で何が違うのかと言うわけだが・・・
名称 | 説明 |
---|---|
require | 実行時に読み込まれる |
use | コンパイル時に読み込まれる |
こんな感じ〜わかんないよ!「use」はコンパイル時に読み込まれるってのはそのままだね。Perlってインタプリタ言語だからコンパイルされないんじゃ〜と思うのだが、いやいや〜CPUは機械語しか理解できないのでPerlもコンパイルされますが、そのタイミングが重要なんだと思う。実行ファイルを作るのがコンパイラ、ブロックごとに実行しながらコンパイルするのがインタプリタって理解しているのだが、それで良いよね。で「use」ってのはブロックごとにでもコンパイルされているので、その時点で読み込まれる。対して「require」は実行されるときに読み込まれる。コンパイラされたコードを実行する際に読み込まれるんだと思う。「require」の使いどころは、処理の分岐でモジュールをロードする際に「require」でやればいいと思う。「use」だと、問答無用で全て読み込んじゃうからメモリがもったいないのよね。
if ($condition) { require ModuleA; ... } else { require ModuleB; ... }
まあ〜そんだけ〜では
内容 | |
---|---|
BEGIN | コンパイル時に実行される |
END | 終了時に実行される。dieなどで終了した場合も呼び出される |
package Foo; BEGIN { ... } sub new { ... } sub END { ... } 1;
あと、INITやCHECKなどのサブルーチンもあるんだが、ようわからん。また調べとく。