I am cleaning up some scripts and ended up pulling an entire script with its subroutines into another script - as a subroutine. Something like:

use strict; sub external { my $foo = some_op(); sub sub_of_sub { print $foo; } }

Like in the example, I have to keep these subroutines in scope so that some variables that are defined in the outer subroutine are available.

I don't want to make these variables global. I have a lot going into this script and I'm trying to keep things organized. I want all of my globals to be things that are used by more than one subroutine.

Some more background:

Essentially, I am writing a module that contains a collection of 'tasks'. A superscript to this one will be importing and calling these tasks individually and for different times, triggers, etc. This is one module of many. Each module will contain the same 'tasks' (same named subroutines) such that my superscript can iterate through them all easily.

Anyway, I checked out Defining a sub within a sub: OK?, but I'm not sure if it exactly answers my question. Why are anonymous subs more acceptable? I just want to get some feedback/suggestions since this seems like something that might be considered... poor Perl form.


In reply to Refactoring: sub within a sub by temporal

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.