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

Re: Question about __PACKAGE__

by gam3 (Curate)
on Jan 22, 2010 at 02:19 UTC ( [id://818871]=note: print w/replies, xml ) Need Help??


in reply to Question about __PACKAGE__

These are exactly the same after the compile stage
__PACKAGE__->hello('text1'); Foo->hello('text1');
These are also the same
hello(__PACKAGE__, 'text1'); hello('Foo', 'text1');
The difference between f('x') and 'x'->f() is that if there is no sub f {} in Foo @INC will be used to look for one.

Look at UNIVERSAL and perltoot.

-- gam3
A picture is worth a thousand words, but takes 200K.

Replies are listed 'Best First'.
Re^2: Question about __PACKAGE__
by sman (Beadle) on Jan 22, 2010 at 03:06 UTC
    Do you mean these four lines belonged to Foo are calling class method instead of object method? Therefore no object is created by them, right?
    __PACKAGE__->hello('test1'); Foo->hello('test2'); hello(__PACKAGE__, 'text3'); hello('Foo', 'text4');
    However, if I call this line:
    Foo->new()->hello('test5');
    one object will be created. Am I right so far?
    Thanks.
      Yes. Mind you, in practice, hello is probably only suppose to called one of the two ways.
      It is important to note that Perl OO does not have any "built in" concept of data. There is no default Constructor and the Destructor consists of a call to DESTROY.

      It might be more descriptive to rewrite Foo->new()->hello('test5'); as

      bless(\sub {}, 'Foo')->hello('test5');
      This just blesses a CODE_REF for fun. It could be a HASHREF or some other REF. The only real difference between
      'Foo'->hello()
      and
      bless(sub {}, 'Foo')->hello()
      Besides the fact that the blessed version can contain data, is that just before the blessed object is Garbage Collected, DESTROY is called with it as the argument ($x->DESTROY). UNIVERSAL contains a DESTROY method, so it always exists.
      -- gam3
      A picture is worth a thousand words, but takes 200K.

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others admiring the Monastery: (7)
As of 2024-04-18 09:18 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found