Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?
 
PerlMonks  

Re^3: OO-style modifiers for 'sub' ?

by adrianh (Chancellor)
on Jan 25, 2003 at 14:43 UTC ( #229846=note: print w/ replies, xml ) Need Help??


in reply to Re: Re: OO-style modifiers for 'sub' ?
in thread OO-style modifiers for 'sub' ?

My issue with the way it works now, is that I can explicitly call a method by using it's full name (Class::Method), thereby bypassing the implicit passing of the first argument. I'd feel safe if there was an easy way to tell my method to do a solid type-check on the first argument, to ensure it's an object or class-name it can work with.

It should be emphasised that:

Class::method($self); # called as a subroutine $self->method; # called as a method

are not equivalent. As soon as you start calling methods as subroutines you can't use SUPER:: or override in subclasses.

Perhaps you want something like:

use Devel::Caller qw(called_as_method); sub foo { my $self = shift; croak "I am an instance method" unless called_as_method(0); # actual body of code }

Now foo croaks unless it is called as a method, which means $self->isa(__PACKAGE__) must be true.

Personally, I wouldn't bother with checks like this. For me somebody calling an OO module in an non-OO style has deliberatly broken encapsulation - so deserves whatever chaos ensues :-)

Update: the called_as_method should also be a fair bit faster since you don't have to do the potentially expensive walk of the inheritance tree.


Comment on Re^3: OO-style modifiers for 'sub' ?
Select or Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (6)
As of 2015-07-04 16:50 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (60 votes), past polls