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 (2442d)