Beefy Boxes and Bandwidth Generously Provided by pair Networks
Clear questions and runnable code
get the best and fastest answer

Re: single instance shared with module

by jynx (Priest)
on Sep 16, 2002 at 21:25 UTC ( #198375=note: print w/ replies, xml ) Need Help??

in reply to single instance shared with module

Brothers smack me down if i'm wrong, but recently i used something similar to this code to do what you're describing:

#!/usr/bin/perl -w use strict; package foo; { my $self = { foo => bar }; sub new { return bless $self, shift; } sub get_obj { return UNIVERSAL::isa($self, 'foo') # or not as cool: #return ref($self) eq 'foo' ? $self : goto &new; } }
This not only makes new instances when you want them, it also can pass on old instances to any class that requires it and uses the 'get_obj' method.

Whether this is Good Coding(tm) or not, i can't say, but it's worked for me (and i might change what i have, depending on how monks respond to this :)


Update: Added the UNIVERSAL::isa call and commented out the ref($self) call due to podmaster's suggestion. Could someone please elaborate on why UNIVERSAL::isa is better?

Update2: Whoops. Put the args for UNIVERSAL::isa in wrong order. Hmm, i tested it before i posted and it seemed to work fine the other way as well. Tested again and apparently i was smoking crack. Mental note: RTFM first next time! ;-)

Comment on Re: single instance shared with module
Download Code
Re: Re: single instance shared with module
by Solo (Deacon) on Sep 16, 2002 at 22:39 UTC
    In brief, UNIVERSAL::isa allows for inheritance, while ref($self) doesn't.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://198375]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others contemplating the Monastery: (10)
As of 2015-03-04 09:19 GMT
Find Nodes?
    Voting Booth?

    When putting a smiley right before a closing parenthesis, do you:

    Results (101 votes), past polls