I'm working on a very large project that has a lot of modules. Unfortunately many of the modules use use too capriciously - they use modules that they really don't need to use. The result is that just by using one module you can pull in half of the code base.

Here's an example of what's going on. A module X might look like this:

package X; use Order; sub doSomething { my ($self, $order) = @_; # $order is an Order object ... $order->some_method(...); }
However in this case X never creates objects of class Order - it merely has a subroutine which expects an Order object as a parameter. Therefore use Order; here is not necessary. The caller of X::doSomething might have to use Order; to create the argument to doSomething.

In thinking about the problem I've come up with this general rule about using use: only use modules whose name space your module directly references. Just because your module interacts with objects of a certain class doesn't mean it needs to pull in that class.

Of course for every rule there are always exceptions. And there are a lot of different ways in which use is used in perl. What do you think?


In reply to general rule for using use by perl5ever

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.