S
sln
I've got a few packages declared in on file. I need a clone/copy
type functionality for all the ones dealing with a high probability
they will be duplicated (but maybe not) in mass. So I need a clone/copy
type functionality. Some classes need 'deep' cloning, some don't.
I came up with this. See any potential problems using this scenario?
I have given all the classes this same mechanism.
Added comments for usenet reading.
Thanks!
sln
-----------------------------------------------------------------
Example:
package ReS;
sub new
{
my $self;
my $class = shift;
if (defined($_[0]) && ref($_[0]) eq 'ReS') {
$self = {};
my $obj = bless ($self, $class);
return copy($obj, $_[0]);
}
$self = {
...
};
# Should we risk calling set_val that does the
# same thing at the expence of a function call ?
# Sure we could do &set_val.. but still overhead
while (my ($name, $val) = splice (@_, 0, 2)) {
next if (!defined $val);
if (exists $self->{lc $name}) {
$self->{lc $name} = $val;
}
}
return bless ($self, $class);
}
sub clone
{
# clone self, return new
return ReS->new( $_[0]);
}
sub copy
{
# copy other to self, return self
return $_[0] unless (defined $_[1] && ref($_[1]) eq 'ReS');
%{$_[0]} = %{$_[1]};
# do specific deep copying..
# see article on dclone function
$_[0]->{'something'} = ();
@{$_[0]->{'something'}} = @{$_[1]->{'something'}};
return $_[0];
}
type functionality for all the ones dealing with a high probability
they will be duplicated (but maybe not) in mass. So I need a clone/copy
type functionality. Some classes need 'deep' cloning, some don't.
I came up with this. See any potential problems using this scenario?
I have given all the classes this same mechanism.
Added comments for usenet reading.
Thanks!
sln
-----------------------------------------------------------------
Example:
package ReS;
sub new
{
my $self;
my $class = shift;
if (defined($_[0]) && ref($_[0]) eq 'ReS') {
$self = {};
my $obj = bless ($self, $class);
return copy($obj, $_[0]);
}
$self = {
...
};
# Should we risk calling set_val that does the
# same thing at the expence of a function call ?
# Sure we could do &set_val.. but still overhead
while (my ($name, $val) = splice (@_, 0, 2)) {
next if (!defined $val);
if (exists $self->{lc $name}) {
$self->{lc $name} = $val;
}
}
return bless ($self, $class);
}
sub clone
{
# clone self, return new
return ReS->new( $_[0]);
}
sub copy
{
# copy other to self, return self
return $_[0] unless (defined $_[1] && ref($_[1]) eq 'ReS');
%{$_[0]} = %{$_[1]};
# do specific deep copying..
# see article on dclone function
$_[0]->{'something'} = ();
@{$_[0]->{'something'}} = @{$_[1]->{'something'}};
return $_[0];
}