もし、未定義のサブルーティンを呼び出した場合には、通常はすぐに、「サブルー
ティンがない」というコンパイル時の致命的エラーになります。(メソッドとし
て使われるサブルーティンも同様で、そのクラスのどの基底クラスにもメソッド
が存在しない場合に、エラーとなります。) しかし、AUTOLOAD
というサ
ブルーティンが、そのパッケージか、もとのサブルーティンが探されるサブルー
ティンで定義されていれば、その AUTOLOAD
サブルーティンが、もとの
サブルーティンを呼び出すときに渡すはずだった引数を使って、呼び出されます。
もとのサブルーティンの完全な名前は、AUTOLOAD
ルーティンとして、同
じパッケージの変数 $AUTOLOAD に記録されています。名前は、普通の引数とし
ては渡されません。というのは、あー、その、だから ...
多くの AUTOLOAD
ルーティンは、eval
を用いて、問題のサブルー
ティンの定義をロードし、そのサブルーティンを、トレースなしに
AUTOLOAD
ルーティンのスタックフレームを消してくれる、特殊な形式の
goto
を使って呼び出します。(たとえば、標準の`AutoLoader' モ
ジュールを参照してください。)しかし、改めて定義を行なわずに、
AUTOLOAD
ルーティン自身で、実行されるはずのルーティンをエミュレー
トすることも可能です。この形式の良い例としては、未定義のサブルーティン呼
び出しを UNIX プログラムへの呼び出しとして扱う、標準の `Shell' モジュー
ルがあげられます。
モジュールが自分自身を、標準の `AutoLoader' モジュールといっしょに 使用するために、自動ロード可能なファイルに分割するのを補助するしくみが用 意されています。拡張モジュールに関するドキュメントを参照してください。
Go to the first, previous, next, last section, table of contents.