package Base; use Carp; my @methods = qw(new something something_else); my %methods; @method{@methods} = (); sub AUTOLOAD { my ($pkg, $method) = $AUTOLOAD =~ /^(.*)::(.*)$/; if (exists $method{$method}) { croak qq(Package "$pkg" must override the method "$method"); } } 1; #### #!/usr/bin/perl -w use strict; package MyObj; use vars qw(@ISA); use Base; @ISA = qw(Base); sub new { return bless {}, shift; } package main; my $thing = MyObj->new; $thing->something;