sub new { my($proto, $fields) = @_; my($class) = ref $proto || $proto; my $self = bless [], $class; ... #### sub new { my $proto = shift @_; my $self = { @atom_fields, @_ }; $self = bless ($self, ref($proto) || $proto); ... #### sub new { my($proto, $fields) = @_; my($class) = ref $proto || $proto; $fields = {} unless defined $fields; # make a copy of $fields. bless {%$fields}, $class; }