Non-MooseクラスをDelegationを使って継承
久々にMoose書こうとしたら酷いことになってたのでリハビリ開始。
Non-Mooseなクラスを継承する時には委譲を使うのは知ってたけどコンストラクタも継承するとこんな感じ?
自信なす><
{ package Parent; use strict; use warnings; sub new { my ($class, %args) = @_; bless {%args}, $class; } sub name { my ($self, $name) = @_; $self->{name} = $name if $name; return $self->{name}; } package Child; use Moose; has parent => ( is => 'ro', isa => 'Parent', handles => [qw/name/], ); no Moose; sub BUILDARGS { my ($class, %args) = @_; $args{parent} = Parent->new(%args); return {%args}; } __PACKAGE__->meta->make_immutable; } my $child = Child->new(name => 'hoge'); warn $child->name;