I wan't to turn a unwieldy hash into a class. It is primarily
a data object with a few methods for retreval of formatted data.
It is going to be passed around as a parameter to several methods
of a different class where data will be fleshed out. Instead of
endless conditional testing of the hash, I thought I would just
validate it as a reference to a data class object.
But I would need a copy constructor and/or a duplicate method.
This is because the object is reused and parameters will change
and because the object might need to be saved and stored at any
particular time.
Example:
package XReS;
sub new
{
my ($class, @args) = @_;
my $self = {
.. set default params ..
};
if (defined($args[0]) && ref($args[0]) eq 'XReS') {
%{$self} = %{$args[0]};
}
else {
while (my ($name, $val) = splice (@args, 0, 2)) {
.. process other args ..
}
}
return bless ($self, $class);
}
sub Dup
{
return XReS->new(shift);
}
Also, do you forsee much more memory overhead by using a
class object instead of just a hash, possibly creating thousands?
Any other pitfalls?
Thanks.
sln
> Hi, I have a need for a Class copy constructor and wonder
> if anybody has implemented this.
See the dclone function of the Storable module or the article
<http://www.stonehenge.com/merlyn/UnixReview/col30.html>
--
Jim Gibson
I knew about deep copy. I read the whole article. I didn't look
at the dclone function yet (as they recommend on that page).
I found it interresting, the recursive sub to find array's that
need to be dup'd. And I'm even better appretiative of Dumper now.
I had some anonymous sub ref's hanging around, wondered about them.
One thing is that if you 'empty' an array, reference or not, by
declaring it with () again, does it create another reference to it
(anonymous or if a reference is taken of it before its cleared)?
I haven't looked at it specifically yet in terms of deep copy but
something like this I will have to resolve:
$href = {};
$href->{aray} = ['1','2'];
or
@tt = ('1','2');
$href->{aray} = \@tt;
@{$href->{aray}} = ();
I know $href->{aray} is a reference,
but if a copy of $href was made,
before it was cleared with = (), is the data
still intact in the copy, or would I have to
do an explicit $newhref->{aray} = [@{$href->{aray}}] ?
Convuluted. Thanks!
sln