Think about Loose Coupling | |
PerlMonks |
Re: Basic Class questionby dsheroh (Monsignor) |
on Aug 21, 2013 at 12:13 UTC ( [id://1050339]=note: print w/replies, xml ) | Need Help?? |
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.
In Section
Seekers of Perl Wisdom
|
|