[Perl] Mooseの自己参照はshiftで

投稿者: | 2011/09/06

なぜかコロっと忘れていたので備忘録的にメモ。

Mooseで作成したモジュール内で、自身のプロパティやメソッドを参照したい場合、
shiftから呼び出せる。

Sample.pm

package Sample;

use Moose;

has 'hoge' => (
    is  => 'rw', 
    isa => 'Str',
    default => 'hogera' 
);

sub print_hoge(){
    print shift->hoge;
}

sub call_print_hoge(){
    shift->print_hoge();
}

__PACKAGE__->meta->make_immutable();
no Moose;

return 1;

 

main.pl

use Sample;

my $sample = Sample->new();

print $sample->hoge;    # hogera

$sample->print_hoge();    # hogera

$sample->call_print_hoge();    #hogera

 

メンバの内部参照(2011.10.12 追記)

あるメンバのdefault値を、他のメンバで使用したい場合。
被参照側のメンバに lazy = 1 を設定して、評価を遅延させる。

has 'fuga' => (
    is => 'ro', 
    isa => 'Str', 
    default => 'fugara', 
    lazy => 1
);

has 'fugaga' => (
    is => 'ro', 
    isa => 'Str', 
    default => sub{ shift->fuga; } 
);

 

@__gfx__ さん、ありがとうございました。


 
 

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください