Beefy Boxes and Bandwidth Generously Provided by pair Networks
Keep It Simple, Stupid
 
PerlMonks  

Re: How to get the name of an aliased function

by tlm (Prior)
on Aug 25, 2005 at 10:44 UTC ( [id://486501]=note: print w/replies, xml ) Need Help??


in reply to How to get the name of an aliased function

DrWhy, if you tell us why you want to do this, we may be able to give you some alternative ideas.

the lowliest monk

  • Comment on Re: How to get the name of an aliased function

Replies are listed 'Best First'.
Re^2: How to get the name of an aliased function
by DrWhy (Chaplain) on Aug 26, 2005 at 16:42 UTC
    I have a set of related[*] modules that all have very similar accessor/mutator methods for their object's instance variables. Instead of typing virtually the same code over and over, I wrote a private _get_set() method in the ultimate base class. I first tried to use aliasing the get the actual method name called, but that didn't work and lead to the OP. I endded up writing another private method that defined all the public accessor/mutators using closures much like adrianh suggests above. Although my closures only call the ultimate _get_set method whereas you are putting the full code in the closure itself (I'll probably make that change since it will increase efficiency slightly and prevent users from calling _get_set directly -- with unpredictable results)

    BTW - I thought about an AUTOLOAD for this purpose, but:

    1. I don't believe AUTOLOADs do inheritance (correct me if I'm wrong) and I didn't want to have to create a separate AUTOLOAD for each class.
    2. I wanted a similar mechanism for handling calls to abstract methods (i.e., if you manage to instantiate an abstract base class and then call one of it's abstract methods you should get feedback that is more helpful than "subroutine not found") and didn't want to confound the two functions into a single AUTOLOAD.
    3. AUTOLOADs are messy.

    [*] Related in the OO-sense, super-/sub-class relationships

    --DrWhy

    "If God had meant for us to think for ourselves he would have given us brains. Oh, wait..."

      If I understand you right, the typical idiom to deal with the situation you describe is something like (untested):

      package Foo; # ... my @fields = qw( eenie meenie minie moe ); make_accessor( $_ ) for @fields; # ... sub make_accessor { my $method = shift; my $sub = sub { # your accessor here; }; my $class = caller; { no strict 'refs'; *{ "$class\::$method" } = $sub; } return; }
      ...which does not require the methods to know their names.

      the lowliest monk

Log In?
Username:
Password:

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

How do I use this?Last hourOther CB clients
Other Users?
Others rifling through the Monastery: (2)
As of 2025-06-20 14:20 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?
    erzuuliAnonymous Monks are no longer allowed to use Super Search, due to an excessive use of this resource by robots.