Perlゼミ

  1. Perl
  2. 構文
  3. オートロード

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の書籍
  • 業務に役立つPerl

    ログ解析など日本語を含むテキスト処理の実践!
    この私、Perlゼミの作者が執筆しています。
    ご購入、口コミ歓迎。
  • Perlの書籍 »
自己紹介
木本裕紀

「今日も元気だ、Perlで元気。
ゆとりあるITエンジニアライフのために
Perl情報を前向きに発信中!」

Twitter
フォロー、いいね、リツート、コメント歓迎

Youtube

チャンネル登録、いいね、コメント歓迎

kimoto.yuki@gmail.com
応援メッセージ、質問、間違い報告歓迎

木本システム株式会社
ご紹介キャンペーン実施中です。契約金額の10%をご紹介料としてお支払い。

(例)30万円のシステム開発委託契約が、1年続いたら、36万円がもらえる!!!