I asked a similar question about this at node Inner Subroutines, mod_perl, and Segfaults.

The respondents gently reminded me that nested subroutines declared at compile time normally exist in the symbol table. That is, they're not made private to the enclosing subroutine.

However, if you do nest a subroutine and refer to the enclosing scope's variables, you'll probably get a variable %s will not stay shared warning, for good reason.

In the following code, what's the scope of $x:

sub outer { my $x = shift; sub inner { return $x; } }
Because you can call inner() from anywhere in the package, or anywhere you qualify it properly, it doesn't function as a closure. The proper solution in a case like this is to use a real closure:
sub outer { my $x = shift; my $inner = sub { return $x }; }
You'd obviously want to do more there, but that's one way to handle things properly, letting Perl worry about scoping for you.

In reply to Re: sub routines inside subroutines by chromatic
in thread sub routines inside subroutines by cleen

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.