http://www.perlmonks.org?node_id=251518


in reply to Location of 'use' statements

Since many modules export into the namespace of the module they are used by, you should put your 'use' statements after your package declaration. If you have multiple packages defined in a single file, you may need multiple 'use' statements for the same modules.

90% of every Perl application is already written.
dragonchild

Replies are listed 'Best First'.
Re: Re: Location of 'use' statements
by djantzen (Priest) on Apr 18, 2003 at 22:32 UTC

    Yep, Data::Dumper for example will complain (under -w) about printing to an unopened file handle if you say

    use Data::Dumper; package Foobar; my $quux = {} print Dumper $quux;

    The idea between the fourth approach is to separate those things must be imported into the package itself, versus those that can be left apart.


    "The dead do not recognize context" -- Kai, Lexx

      Yep, Data::Dumper for example will complain (under -w) about printing to an unopened file handle if you say

      Actually its perl that complains here. The warning is provided because perl reads

      print Dumper $quux;

      as

      use IO::File; Dumper->print($quux);

      when 'Dumper' is an unknown bareword. Personally I always disambiguate print statements in some way just because ive been bitten a few times.

      Incidentally in this case its not much harder (and often desirable) to replace that with

      print Data::Dumper->new([$quux],['quux'])->Dump(),"\n";

      I say desirable, and use the long winded ->new() form because now we can easily add stuff in the middle:

      # we have large cyclic structures: disable pretty indent, enable purit +y mode. print Data::Dumper->new([$quux],['quux'])->Purity(1)->Indent(1)->Dump( +),"\n";

      ---
      demerphq

      <Elian> And I do take a kind of perverse pleasure in having an OO assembly language...

        Actually its perl that complains here.

        That's what I meant to say ;^) Normally when I'm writing new code at some point I end up wanting to Dumper something, and so recently I've just started adding that automatically to the top of the file. My new mantra is use strict; use warnings; use Data::Dumper, and then after development I'll remove the latter.

        I'm glad you posted this because when I read # we have large cyclic structures: disable pretty indent, enable purity mode I realized that my normal use of Dumper in the application I'm writing has been unnecessarily difficult to read. I've got a data structure where trees hang off of digraph nodes and a dump of any element fills the entire screen from side to side -- your version is much easier on the eyes, thanks!


        "The dead do not recognize context" -- Kai, Lexx