Suppose a class or other module creates other packages to get its job done. It may need targets for blessings to handle overloaded operators, or targets for tie, or just to keep things neat.

Now for variables that should not be seen outside of the module, we have my. If you wanted to hide a function, you could use a local function reference instead.

But what about packages? In C++ an anonymous namespace will localize anything to the current translation unit (source file), including class names. In Perl, a package pretty much has to have an actual name. That is, it can't be a local reference to an unnamed object (e.g. what Symbol::gensym does). I suppose the normal way of doing this is by assuming that if I named my module Foo, than no other module named Foo exists, and Foo::x, Foo::y, etc. are all OK. Big comments say that those internal namespaces are, well, internal (e.g. see documentation for Carp::Heavy). If more than one developer or a distributed team is working on the same module, then you still have to be careful about conflicts, and perhaps use an internal naming convention.

But, is there a better way? Are there any other ways, really? Is there anything proposed for Perl 6 that will better hide internal details from other code?

—John


In reply to Hiding Internal Classes ? by John M. Dlugosz

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.