Beefy Boxes and Bandwidth Generously Provided by pair Networks DiBona
The stupid question is the question not asked
 
PerlMonks  

ref($proto) - just say no!

by merlyn (Sage)
on Jan 15, 2001 at 21:48 UTC ( [id://52089]=note: print w/replies, xml ) Need Help??

This is an archived low-energy page for bots and other anonmyous visitors. Please sign up if you are a human and want to interact.


in reply to Re: perl oo
in thread perl oo

I disagree about that ref($proto) part.

If you want an instance method called "new", I have no idea what it's doing. If you want to clone an object, call your instance method "clone" or "copy". If you want to provide a new empty object of the same class as an existing object, just use:

my $sibling = (ref $original)->new(...);

There is no point in putting that ref-ish crap in something called "new". In fact, it's misleading.

Note that I'm not arguing that every method should be either a class method, or an instance method, but not both. Rather, I'm saying that "new" on an instance could mean either "clone" or "make new one like...", and thus you are confusing at least half your audience, guaranteed.

Yes, there are other prominent members of the Perl community who disagree with me on this. Ask them if they were programming in Smalltalk in 1980. {grin}

I consider any use of this ref($proto) || $proto in new to be "cargo cult programming", and mark it off as such in the code reviews I do.

-- Randal L. Schwartz, Perl hacker


update: I finally wrote this up in a way that fully explains my objections. See the last few paragraphs of my SysAdmin column, which triggered a partial rewrite of perltoot for Perl 5.8.5 removing this objectionable construct.

Replies are listed 'Best First'.
Re: ref($proto) - just say no!
by mr.nick (Chaplain) on Jan 16, 2001 at 01:30 UTC
    Huh. I seem to have hit upon a long-standing disagreement without realizing it. Your point seems sensible; I've been doing it that way because it's the one that's in perltoot :)

      I know what you mean! There is so much in all the Perl OO materials that is overhead without complete explanation it's kind of shocking.

      coreolyn -- return bless { me => 'father' }, $haveSin";

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://52089]
help
Sections?
Information?
Find Nodes?
Leftovers?
    Notices?
    hippoepoptai's answer Re: how do I set a cookie and redirect was blessed by hippo!
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.