##
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;
}