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..."


In reply to Re^2: How to get the name of an aliased function by DrWhy
in thread How to get the name of an aliased function by DrWhy

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.