package Base; # define default values sub earthbound { 0 } sub metallic { 0 } sub blood { "cold" } sub weakness { undef } # update 2: sub validate { my ($class) = @_; return ($class->blood eq 'warm' or ! $class->metallic); } # define 'mixins' - don't subclass these, # they'll export their properties when you use them package Flies; use base Exporter; our @EXPORT = qw(earthbound); sub earthbound { 1 } package Robot; use base Exporter; our @EXPORT = qw(metallic); sub metallic { 1 } # etc... package Superman; use base Base; use Flies; use Robot; # superman's very metallic.