package MyClass;
use Moo;
with 'MyClass::Child';
sub foo { return 'foo'; }
1;
####
package MyClass::Child;
use Moo::Role;
sub foo { die 'horribly'; }
sub bar { return 'bar'; }
1;
####
#!/usr/bin/perl
use strict; use warnings; use feature 'say';
use MyClass;
my $obj = MyClass->new;
say $obj->foo;
say $obj->bar;
__END__
####
$ perl 1158279.pl
foo
bar
####
package MyClass;
use Moo;
sub BUILD {
my ( $self, $args ) = @_;
my %modules = (
1 => 'MyClass::MyChild',
0 => 'Acme::Frobnicate',
);
my $module = $modules{ $args->{'be_serious'} };
eval "with '$module'; 1;" or die $@;
return $self;
}
sub foo { return 'foo'; }
1;