$ cat lib/A.pm
package A;
use Moose;
has bar => (
is => 'rw',
default => 'A-bar',
);
__PACKAGE__->meta->make_immutable;
####
$ cat lib/C.pm
package C;
use Moose;
sub whos_who {
my ($self) = @_;
print "whos_who() is in package: ", __PACKAGE__, "\n";
print "\$self is in package: ", ref($self), "\n";
return;
}
__PACKAGE__->meta->make_immutable;
##
##
$ cat lib/D.pm
package D;
use Moose;
has 'bar' => (
is => 'rw',
default => 'D-bar',
);
__PACKAGE__->meta->make_immutable;
##
##
$ cat lib/C1.pm
package C1;
use Moose;
extends 'C';
use A;
use D;
has a => ( is => 'ro', default => sub { A->new } );
has d => ( is => 'ro', default => sub { D->new } );
sub foo {
my ($self) = @_;
print $self->a, "\n";
print $self->a->bar, "\n";
print $self->d, "\n";
print $self->d->bar, "\n";
$self->whos_who;
return;
}
__PACKAGE__->meta->make_immutable;
##
##
$ cat ./acd.pl
#!/usr/bin/env perl
use strict;
use warnings;
use lib 'lib';
use C1;
my $c1 = C1::->new();
$c1->foo();
##
##
$ ./acd.pl
A=HASH(0x25db7c0)
A-bar
D=HASH(0x25db880)
D-bar
whos_who() is in package: C
$self is in package: C1