My personal bias is against having dual-mode routines (even dual-mode constructors, which seem to be common). I find that with time, the usage of the different modes diverges enough to make them different routines. And it can be semantically confusing. If you want to share code, factor out the common code into a private routine and call it from both your function and your method.

That said, you can do something like this to detect being called as a function, as a package method, or as an object method, even in the face of inheritance:

sub myEverythingMethod { my $classOrObject = shift if UNIVERSAL::isa( $_[0], __PACKAGE__ ); if (!defined($classOrObject) ) { # function } elsif (ref($classOrObject)) { # object method } else { #package method } }

update: fixed setting of classOrObject


In reply to Re: feedback on subroutine as both function and method in one by bikeNomad
in thread feedback on subroutine as both function and method in one by cpousset

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.