package Test;
use Moose;

has message => (
  is => q/ro/,
  isa => q/Str/,
);

#----------------------------
package Test2;
use Moose::Role;

has plugged => (
  is => q/ro/,
  isa => q/Test/,
);

sub _plugin_ { 
  my $pkg = shift;
  my $subname = lcfirst $pkg;

  { no strict qw/refs/;
    if (!defined &{"Test::$subname"})
    {
      *{"Test::$subname"} = sub {
        my $self = shift;
        my $obj = $pkg->new(@_, plugged => $self);
        $obj->execute;
      };
    }
  }
}

requires q/execute/;

#----------------------------
package Test3;
use Moose;

with 'Test2';

has message => (
  is => q/ro/,
  isa => q/Str/,
);

sub execute
{
  my $self = shift;
  print join(", ", $self->plugged->message, $self->message), "!\n";
}

__PACKAGE__->_plugin_;

#----------------------------
package main;

Test->new(message => "Hello")->test3(message => "World");

こんなんでいいのかなぁ

トラックバック(0)

トラックバックURL: http://floralcompany.jp/mt/mt-tb.cgi/35

コメントする

AUTHOR

  • turugina (虎王 剱奈)
  • E-mail: turugina {at} floralcompany.jp
  • pixiv
  • ニジエ

2014年5月

        1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31

アーカイブ

OpenID対応しています OpenIDについて
Powered by Movable Type 5.2.10

- 警 告 -

本サイトにはいわゆる「18禁画像」(イラスト)へのリンクが存在します。 未成年の方や、その手の画像に不快感を覚える方は、 該当記事(「えちぃの」及び「ちょっとえちぃの」カテゴリ) をご覧にならないようお願いいたします。

上記を理解した上で非表示のブログパーツを表示する
あわせて読みたいブログパーツ
ついった
drawr/pixiv/twitpic