Hi Todd Chester,

Perl's prototypes are sometimes misunderstood to be something like function type signatures, but that's exactly not what they are. In Perl, Prototypes influence not only what subroutine arguments are accepted, but how the calls to those subroutines are parsed. They're not necessarily the best thing for validating subroutine arguments, and can sometimes lead to confusing code. I'd recommend Perl's prototypes primarily for cases where one wants to create functions whose syntax imitates Perl builtins.

In your case, it's the "( $ )" immediately after sub RmdirAndLoop, which makes calls to RmdirAndLoop be parsed like a unary operator. Unless it is your intention to change how calls to RmdirAndLoop are parsed, as the AM said it's perfectly fine to remove the "( $ )" prototype, and if desired add code to check the arguments.

Just for completeness, there is another way to get rid of the warning, from the bottom of the Prototypes doc:

If a sub has both a PROTO and a BLOCK, the prototype is not applied until after the BLOCK is completely defined. This means that a recursive function with a prototype has to be predeclared for the prototype to take effect, like so:

sub foo($$); sub foo($$) { foo 1, 2; }

Hope this helps,
-- Hauke D


In reply to Re: What are the rules on calling myself? by haukex
in thread What are the rules on calling myself? by Todd Chester

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.