in reply to Re: (Ovid - minor code nits) Re: Adding autoloaded methods to symbol table with using strict refs
in thread Adding autoloaded methods to symbol table with using strict refs
There is good reasoning behind doing my $class = ref $proto || $proto;. Unfortunately, 99% of people who do that have no idea why they're doing it. The smarter ones will realize that it's doing some sort of error-checking and chalk it up to that.
What that's really doing is co-opting your constructor (typically called new()) and using it as a copy function, (typically called copy() or clone()). There is something in C++ (and, I believe, Java) called a copy constructor, which will do that cloning for you.
I personally think that new() should be reserved for creating a new instance and clone() should be reserved for taking an existing instance and returning a copy of it. That is because the two functionalities are vastly different. new() almost never has to deal with recursive data structures, deep vs. shallow copying, and the like.
In addition, EVERY single time I've seen ref $proto || $proto written, there was no provision made for a copy constructor. In fact, that was the last it did with $proto. Doesn't seem like much of a copy constructor to me!
Personally, I prefer the following construction:
That makes it completely obvious that I'm using new() to return a new instance. I'll create a copier if (and only if) I need one.sub new { my $class = shift; return undef if ref $class; .... }
------
We are the carpenters and bricklayers of the Information Age.
Don't go borrowing trouble. For programmers, this means Worry only about what you need to implement.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Mmmm ... cargo cult progamming is nummy!
by dws (Chancellor) on Feb 27, 2002 at 00:25 UTC | |
by merlyn (Sage) on Feb 27, 2002 at 00:47 UTC | |
by dws (Chancellor) on Feb 27, 2002 at 04:23 UTC | |
by merlyn (Sage) on May 19, 2003 at 08:30 UTC | |
by dws (Chancellor) on May 19, 2003 at 17:51 UTC | |
Re: Mmmm ... cargo cult progamming is nummy!
by Anonymous Monk on Feb 27, 2002 at 02:41 UTC | |
by chromatic (Archbishop) on Feb 27, 2002 at 05:05 UTC | |
by dragonchild (Archbishop) on Feb 27, 2002 at 14:24 UTC | |
by Anonymous Monk on Mar 10, 2002 at 06:34 UTC |