処理をクラス毎に分割し実装担当者が メソッドの in -out のチェックを行うようにすれば、個々人が並列に実装作業を行うことができるようになります。
package Yyy;
use Mouse::Role;
before 'init' => sub {
my $self = shift;
push @{$self->list}, 'y';
};
1;
package Zzz;
use Mouse::Role;
before 'init' => sub {
my $self = shift;
push @{$self->list}, 'z';
};
1;
package Main;
use Mouse;
with ' 'Yyy', 'Zzz';
has list => (
is => 'rw',
isa => 'ArrayRef',
default => sub { []; }
);
sub init {
my $self = shift;
my $string = join ('-', @{$self->list});
return $string;
}
1;
use Main;
my $m = Main->new();
print $m->init(); # 呼び出し順をたどって z-y が出力される
with に追記した逆順に各クラスの before 'init' が実行処理されるようになっています。上記のコードの場合は Yyy, Zzzのそれぞれのクラスを担当者で実装してもらうわけです。