Beefy Boxes and Bandwidth Generously Provided by pair Networks
go ahead... be a heretic

Re: Basic Class question

by dsheroh (Prior)
on Aug 21, 2013 at 12:13 UTC ( #1050339=note: print w/replies, xml ) Need Help??

in reply to Basic Class question

Yes, there's a good reason for it: That's how OO works in Perl. When you invoke a sub using ->, then whatever is on the left side of the arrow is passed as the first argument.

If you call My::Class->foo, then foo gets My::Class as its first argument, allowing it to know which class it was called as a method of. This isn't terribly important in most cases, but, without it, things like polymorphic constructors get a lot trickier, since they don't know whether they were called on the base class or a subclass.

If you call $some_obj->foo, then foo gets $some_obj as its first argument, which is extremely important if you want to be able to access the object's instance data.

If you call My::Class::foo, then it gets only the arguments you explicitly provide, the same as if you imported it and then called foo()1. But you probably don't really want to do that. Writing subs that can be called in both OO and non-OO fashions adds complexity and, in most cases, provides little or no benefit.

1 Note that I didn't prefix the function call with &. It's not needed in Perl 5 and has non-obvious side-effects which you almost certainly don't need. Only use the & prefix on function calls if you know exactly what the effects are and why you want those effects.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1050339]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others chilling in the Monastery: (8)
As of 2017-09-26 18:32 GMT
Find Nodes?
    Voting Booth?
    During the recent solar eclipse, I:

    Results (297 votes). Check out past polls.