package HashBasedObject; sub new { my ($class, %arg) = @_; bless {%arg}, $class; } sub unblessed_copy { my $self = shift; return {%$self}; } 1; #### package ArrayBasedObject; sub new { my ($class, @arg) = @_; bless [@arg], $class; } sub unblessed_copy { my $self = shift; return [@$self]; } 1;