コンパイル時

コンパイル時

コンパイルフェーズのこと。Perlインタープリタ言語だと言われることが多いため誤解しやすいが,ソースコードを読み込む際にバイトコード?と呼ばれる形式に瞬間的にコンパイルしているのである。コード中でサブルーチン本体を記述する前でも呼び出しできるのはサブルーチン名をコンパイル段階で知っているためである。

バイトコードインタープリタによって実行されるので,そういう意味では.netアプリケーションJavaと同じである。use,our,package,eval(ブロックを実行するeval)などの関数コンパイル時に実行されている。

また,BEGINロックで囲むことによって任意のコードをコンパイル時に実行できる。evalやrequireのような関数コンパイラを呼び出すためオーバーヘッドが大きいが,コンパイル時に実行してしまうことでコンパイラを再呼び出しする時間を節約できる。

BEGIN {
  eval 'use My::Module'; # インストールされているか不明なモジュールを使う時に・・・
  require My::Module::Alternative if $@; # エラーの場合に代わりのモジュールを使う
}