In general, I have two types of modules: In the former case, the Modules themselves are "stateless" -- i.e. they have no variables of its own. All data is passed to the various functions as function arguments. If those functions call other functions, they pass what arguments they need.

In the latter case, data is passed in to the modules as parameters to the objects (as someone else already mentioned), and thus the data can be shared among the functions without being explicitly passed.

Module-level state is problematic -- if multiple subsystems of your code use the same module, they might bang into each other.

This is the same problem in general with global variables -- they act against subsystem decoupling, which is a powerful technique for minimizing the complexity, and thus increasing the reliability and extensibility, of the systems we are building.

This is not to say that module-level state should never be used, but you should think carefully about the extensibility ramifications if you do use it, and have a good reason to pay this cost.

Sort of a long answer for saying "function paraments or object instance variables..." I hope this helps...

--JAS

In reply to Re: Re: Packages and modules by jsegal
in thread Packages and modules by Anonymous Monk

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.