##
package AbstractFoo;
...
sub new {
my $package = shift;
bless { @_ }, $package;
}
...
my $foo1 = new SubclassOfAbstractFoo(); # GOOD
my $foo2 = new AbstractFoo(); # BAD
####
package AbstractFoo;
...
sub new {
my $package = shift;
die "Don't subclass AbstractFoo directly!"
if $package eq "AbstractFoo";
bless { @_ }, $package;
}