@kyanny's blog

My life. Opinions are my own.

Moose の around について

before, after はそれぞれ、メソッド実行の前、後にコールされるサブルーチンをフックとして追加できるんだろうなーと思っていてその通りだった。 around だけわからなかったので、サンプルコードをそのまま実行してみた。

http://search.cpan.org/~drolsky/Moose-0.89/lib/Moose/Manual/MethodModifiers.pod

  around 'foo' => sub {
      my $orig = shift;
      my $self = shift;

      print "I'm around foo\n";

      $self->$orig(@_);

      print "I'm still around foo\n";
  };

around は、 'foo' ってメソッドを上書きするものだった。もともと呼ばれるはずだったメソッドのサブルーチンリファレンスを第一引数に、自分自身のインスタンスを第二引数にとり、 $self->$orig(@_) でメソッドを実行できて、それ以外にも好きなことができると。 $self->$orig(@_) を呼ばないなんてこともできる。

どういうときに使えばいいかはまだわからないけど、とにかく一つシンタックスを理解できてよかった。