use v5.14; use warnings; package MonkeyMan::Error { use Moose; my @subclasses = qw( Unrecoverable Unrecoverable::BrainDamage ); for my $stem (@subclasses) { my $subclass = join "::" => (__PACKAGE__, $stem); my $parent = ($subclass =~ s/::\w+$//r); warn "Creating $subclass with parent $parent\n"; Moose::Meta::Class->create( $subclass => ( superclasses => [ $parent ] ), ); } } my $err = MonkeyMan::Error::Unrecoverable::BrainDamage->new; print $err->dump;