use MooseX::Declare; class AbstractClass { sub BUILD { my $self = shift; # This is the mechanism that prevents instantiation if ( ref($self) eq __PACKAGE__ ) { # throw exception here } } # other methods go here }