package Base; sub new { bless \my($scalar), shift } package Optional; use Carp qw(croak); sub optional_method { croak q{You said you would implement optional_method and didn't!}; } package A; use base qw(Base); # No optional_method. package B; use base qw(Base Optional); # Must implement optional_method. sub optional_method { 'Woot!' }