コンパイルと実行

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";
}