AUTOLOAD

Fooパッケージにないbaz()メソッドを呼ぶと、代わりにAUTOLOAD()が呼ばれる。AUTOLOAD()ではメソッド名は$AUTOLOADで参照できる。

 #!/usr/bin/env perl
 
 use strict;
 use warnings;
 use 5.012;
 
 package Foo;
 
 use Data::Dumper ;
 
 sub new {
     my $class = shift;
     bless {@_}, $class;
 }
 
 sub foo {
     my $self = shift;
     say "foo()";
 }
 
 sub AUTOLOAD {
     my (@arg) = @_;
     our $AUTOLOAD;
     say 'METHOD: ' . $AUTOLOAD;
     say 'ARGS: ' . Dumper \@arg;
 }
 
 package main;
 
 my $f = Foo->new;
 
 $f->foo();
 
 $f->baz(1,2,3);

↑を実行すると、結果は↓。

 foo()
 METHOD: Foo::baz
 ARGS: $VAR1 = [
           bless( {}, 'Foo' ),
           1,
           2,
           3
         ];
 
 METHOD: Foo::DESTROY
 ARGS: $VAR1 = [
           bless( {}, 'Foo' )
         ];

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS

Last-modified: 2012-01-13 (金) 15:37:56