コンパイルと実行
perlは、コンパイラとインタプリタが共存した仕組みになっている。まず、テキストをコンパイラがコンパイルして行き、これを「コンパイルフェーズ」と呼ぶ。コンパイルフェーズに実行を行う事も出来る。コンパイルフェーズが終ると、コンパイラはコンパイルした物をインタプリタに引き渡す。少しづつ引き渡すのではなく、perlの場合は記述を全てコンパイルし、それを一気にインタプリタに引き渡す。インタプリタは引き渡された言語を実行する。そして、インタプリタに引き渡された時点を持って、「実行フェーズ」と呼ばれる処理段階に入る。実行フェーズでもコンパイルを行う事が出来る。
http://kabocha.org/jelfe/07/14.html
なるほど。
恥ずかしながら、あまり意識したことなかった。。。
んで、コンパイル時に実行するためにBEGINブロックがあるというわけか。
ちなみに、BEGINブロックはプログラムの生涯で1回のみ利用されるらしい。
for (0..9) { BEGIN { print "now in the BEGIN Block\n"; } print "now out of the BEGIN Block\n"; }