Interesting, I was unaware of such a formal definition of a method object; I was simply following Fowler's lead. I'm not sure he was referring to method objects in that sense. Now that you bring it up, though, that's an interesting programming concept. Looking around, I found this interesting paper on the topic of writing functors in Perl. I imagine that Class::Prototyped would be useful in implementing this in Perl

Like Fowler's example, though, mine is also probably too simple to show the usefulness of this refactoring pattern, under which the use of a functor or the like would actually be useful. As I go through Fowler's refactoring patterns, I find that many of them are perfectly applicable to non-OO Perl. In fact, the example I gave in my follow-up about CPAN modules does just that.

I most often employ this pattern when I am trying to avoid the blob anti-pattern and I want to get a bunch of related methods out of my class. It can also be useful if I'm working in an OO framework and I want to swap in a different class. I would implement it like this:

sub some_method{ return shift->that_package()->new(); }

and later:

sub that_package{ return 'Some::Package'; }

Then when I'm sub-classing in my framework, I can override package to provide the name of the package I want to actually use. This will generally be a sub-class or sibling of Some::Package and have the same interface.

perl -e 'split//,q{john hurl, pest caretaker}and(map{print @_[$_]}(joi +n(q{},map{sprintf(qq{%010u},$_)}(2**2*307*4993,5*101*641*5261,7*59*79 +*36997,13*17*71*45131,3**2*67*89*167*181))=~/\d{2}/g));'

In reply to Re^2: Refactoring Perl #8 - Replace Method with Method Object by agianni
in thread Refactoring Perl #8 - Replace Method with Method Object by agianni

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.