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 spamIn reply to Why ref($proto) should be avoided
by jeffa
in thread My first stab at OO perl...
by Theseus
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |