my $self = bless deep_copy( \%default_values ), $class; #### #!/usr/local/bin/perl use strict; use warnings; use Data::Dumper; my $count = 0; my %default_values = ( SUBJECT => 'Subject (<= 44 characters) goes here', AUTHOR => { NAME => 'A. U. Thor', CPANID => 'AUTHOR', WEBSITE => 'http://a.galaxy.far.far.away/modules', EMAIL => 'a.u.thor@a.galaxy.far.far.away', }, ); compare( { %default_values }, { 'NAME' => 'ABC::Alpha', 'AUTHOR' => { NAME => 'James E Keenan', EMAIL => 'jkeenancpan.org', }, } ); compare( { %default_values }, { 'NAME' => 'ABC::Alpha', 'AUTHOR' => { NAME => 'James E Keenan', CPANID => 'JKEENAN', }, } ); print "\nFinished\n"; sub compare { print "\nStart TEST ", ++$count, "----------\n\n"; my ($dvref, $paramsref) = @_; print Dumper ($dvref, $paramsref); my %dv = %{ $dvref }; my %parameters = %$paramsref; foreach my $param ( keys %parameters ) { if ( ref( $parameters{$param} ) eq 'HASH' ) { foreach ( keys( %{ $parameters{$param} } ) ) { $dv{$param}{$_} = $parameters{$param}{$_}; } } else { $dv{$param} = $parameters{$param}; } } print Dumper (\%dv); } #### compare( default_values(), { 'NAME' => 'ABC::Alpha', 'AUTHOR' => { NAME => 'James E Keenan', EMAIL => 'jkeenancpan.org', }, } ); compare( default_values(), { 'NAME' => 'ABC::Alpha', 'AUTHOR' => { NAME => 'James E Keenan', CPANID => 'JKEENAN', }, } ); sub default_values { my %default_values = ( SUBJECT => 'Subject (<= 44 characters) goes here', AUTHOR => { NAME => 'A. U. Thor', CPANID => 'AUTHOR', WEBSITE => 'http://a.galaxy.far.far.away/modules', EMAIL => 'a.u.thor@a.galaxy.far.far.away', }, ); return { %default_values }; } } #### my $self = ref($class) ? bless( default_values(), ref($class) ) : bless( default_values(), $class );