package My::Base::Class; sub new { my $class = shift; my $self = bless {}, $class; (@_ % 2) && die "Odd number of parameters passed to new()"; my %options = @_; while (my ($k, $v) = each %options) { next unless $self->can($k); $self->$k($v); } return $self; }