in reply to Re: (jeffa) 3Re: My first stab at OO perl...
in thread My first stab at OO perl...
You almost got me. :)
On page 103, TheDamian explains that calling a 'constructor' as an object method is a lazy way to copy an object, but observe what happens when you change an object's attributes at runtime and try to clone it:TheDamian also explains on page 105 thatuse strict; use Clone qw(clone); my $foo = foo->new(); $foo->{spam} = {spam =>'eggs'}; my $bad_clone = $foo->new(); my $good_clone = clone($foo); $bad_clone->{spam}->{spam} or warn "bad has no eggs"; $good_clone->{spam}->{spam} or warn "good has no eggs"; package foo; use strict; sub new { my $class = shift; my $proto = ref($class) || $class; return bless {}, $proto; }
While many experts view the overloading of constructors as object copiers to be a natural extension of their functionality, others consider the technique unintuitive, too subtle, and more likely to produce obscure and hard-to-maintain code.and on page 106
If you have a choice, it's probably better to code a seperate clone method. Apart from keeping your individual methods simpler and less prone to bugs, the method's name will force client code to be more clearly self-documenting.
jeffa
doesn't like spam
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Why ref($proto) should be avoided
by frag (Hermit) on Jul 17, 2002 at 11:30 UTC | |
by jeffa (Bishop) on Jul 17, 2002 at 14:49 UTC |
In Section
Seekers of Perl Wisdom