package Foo; sub new { my $class = shift; my %options = @_; my $self = {}; # Do 1000 lines of stuff with %options return bless $self, $class; } package Bar; use base 'Foo'; # A bunch of stuff goes here, but NO new() method! package main; my $object = Bar->new( # A bunch of named parameters go here ); #### 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; }