#!/usr/bin/perl use warnings; use strict; sub MotionSensorA::new { bless { type => $_[1] }, $_[0] } sub MotionSensorB::new { bless { type => $_[1] }, $_[0] } { package Device; use Moose; has laboratory => (is => 'ro', isa => 'MotionSensorB', default => sub { 'MotionSensorB'->new('senMotion_H2_S1'); }); has fruitcellar => (is => 'ro', isa => 'MotionSensorA', default => sub { 'MotionSensorA'->new('senMotion_H1_S1'); }); sub event { my ($self) = @_; foreach my $device ($self->meta->get_attribute_list) { print "$device: ", $self->$device->{type}, "\n"; } } __PACKAGE__->meta->make_immutable; } my $d = 'Device'->new; $d->event;