Copy constructor and Dup method in Perl

Discussion in 'Perl Misc' started by sln@netherlands.com, Nov 19, 2008.

  1. Guest

    Hi, I have a need for a Class copy constructor and wonder
    if anybody has implemented this.

    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
     
    , Nov 19, 2008
    #1
    1. Advertising

  2. Jim Gibson Guest

    In article <>,
    <> wrote:

    > 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
     
    Jim Gibson, Nov 20, 2008
    #2
    1. Advertising

  3. Guest

    On Wed, 19 Nov 2008 17:36:55 -0800, Jim Gibson <> wrote:

    >In article <>,
    ><> wrote:
    >
    >> 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>


    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
     
    , Nov 21, 2008
    #3
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Aire
    Replies:
    3
    Views:
    487
    Mike Wahler
    Jan 25, 2004
  2. Generic Usenet Account
    Replies:
    10
    Views:
    2,344
  3. cinsk
    Replies:
    35
    Views:
    2,730
    James Kanze
    Oct 11, 2010
  4. François Beausoleil

    :s.respond_to?(:dup) && :s.dup raises

    François Beausoleil, Apr 5, 2007, in forum: Ruby
    Replies:
    1
    Views:
    115
    Tim Hunter
    Apr 5, 2007
  5. Luka Stolyarov
    Replies:
    10
    Views:
    313
    Thomas Sondergaard
    Sep 11, 2010
Loading...

Share This Page