AUTOLOAD - サブルーチンのオートロード
Perlではサブルーチンが存在しなかった場合に呼び出されるAUTOLOADというサブルーチンを定義することができます。これをサブルーチンのオートロードと呼びます。
package MyModule;
aaaaiiiii( 1, 2 );
our $AUTOLOAD;
sub AUTOLOAD {
# ...
}
our $AUROLOADを定義しておくと、呼び出された関数名を取得できます。
オートロードは何のために使うの
日常の仕事でプログラミングをするときは、オートロードを使う必要性はほとんどありません。また、モジュールを作成するときも、オートロードを積極的に使う理由はありません。
オートロードの呼び出しは、非常に遅く、代替的な手段がたいていの場合はあります。
アクセッサを作りたい場合は、evalで動的に生成したり、サブルーチンのリファレンスを型グロブに代入する方法のほうが、パフォーマンス的にも優秀です。
Perlで、唯一オートロードでしか実現できない機能があります。それは、オブジェクトにメソッドを生やすということです。普段は使うことはないですが、フレームワークでこの機能を実現したいという場合は、唯一の手法になります。
サンプルプログラム
サブルーチンのオートロードのサンプルです。
use strict;
use warnings;
# AUTOLOAD サブルーチン
# ・定義しておくとサブルーチンの名前を発見できなかった場合に呼び出されます。
print "1: AUTOLOAD で、存在しない関数を呼び出す\n";
# どこにも定義していない関数を呼び出すと。
aaaaiiiii( 1, 2 );
# これが呼ばれます。
sub AUTOLOAD {
# $AUROLOAD を定義しておくと、呼び出された関数名を取得できます。
our $AUTOLOAD;
# 関数名と引数を受け取れます。
my (@arg) = @_;
print "AUTOLOAD が呼び出されました。\n";
print "呼び出そうとした関数は、 $AUTOLOAD です。\n";
print "引数は、" . join(',', @arg) . "です。\n";
}
Perlゼミ

