私はこのコードを持っています:
package Foo;
use Moo;
has attr => ( is => "rw", trigger => 1 );
sub _trigger_attr
{ print "trigger! value:". shift->attr ."\n" }
package main;
use Foo;
my $foo = Foo->new( attr => 1 );
$foo->attr( 2 );
戻り値:
$ perl test.pl
trigger! value:1
trigger! value:2
これは、Moo の Triggers のデフォルトの文書化された動作です。
属性がコンストラクターを介して設定されている場合、トリガーの実行を無効にするにはどうすればよいですか?
もちろん、私はこのようにすることができます:
package Foo;
use Moo;
has attr => ( is => "rw", trigger => 1 );
has useTriggers => ( is => "rw", default => 0 );
sub _trigger_attr
{
my $self = shift;
print "trigger! value:". $self->attr ."\n" if $self->useTriggers
}
package main;
use Foo;
my $foo = Foo->new( attr => 1 );
$foo->useTriggers( 1 );
$foo->attr( 2 );
そして得る:
$ perl testt.pl
trigger! value:2
それでうまくいきますが...それは間違っていると感じます;)。