なぜかコロっと忘れていたので備忘録的にメモ。
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__ さん、ありがとうございました。
@uma_blue BUILD時にプロパティを使いたいときはlazy => 1にするといいですね! #Moose
— Fuji, Goro (@__gfx__) October 12, 2011