around modifier を使うと、aroundで指定したメソッドの前後に処理を挟むことができます。要するに、AOPのinterceptorと同じですね。
最近、正規表現で書けるようパッチを送ったので、around modifireに正規表現が書けるようになります。正規表現にマッチする全てのメソッドにaround modifierを適用できるので、aroundが柔軟に書けるようになりますね。
{
package Dog;
use Moose;
sub bark_once {
my $self = shift;
return 'bark';
}
sub bark_twice {
return 'barkbark';
}
around qr/bark.*/ => sub {
'Dog::around(' . $_[0]->() . ')';
};
}
my $dog = Dog->new;
is( $dog->bark_once, 'Dog::around(bark)', 'around modifier is called' );
is( $dog->bark_twice, 'Dog::around(barkbark)', 'around modifier is called' );
まだ、色々と制約があるから、近々、もう少しパッチおくって柔軟に書けるようにするよ!
moooooooooooooooooooose!



Leave a comment