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などのサブルーチンもあるんだが、ようわからん。また調べとく。