I have a perl script which automates a ton of database administration work. Much of the logic is duplicated between many of the tasks, so I am using subroutine references extensively to plug in the appropriate custom code where necessary. Since these databases exist in a production environment, audit logs are an absolute necessity. It would be nice to have the names of the subroutines (called by reference) present in the log files.

My question is given a subroutine reference, is it possible to determine the original name of the routine so that it may be placed in the log? Since subroutine references may point to anonymous blocks of code, I suspect that it's not.

As a work-around, I've found that it's possible to pass the subroutine names as text strings. When they're passed into a routine, I check whether they're a scalar (string sub name) or subroutine reference with ref(). If they're a text name, it's easy enough to generate the reference with an eval(), and I can stuff the original name away for later reference.


In reply to possible to determine the name of a sub from a sub reference? by taghi

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.