Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re: Location of 'use' statements

by dpuu (Chaplain)
on Apr 19, 2003 at 20:19 UTC ( #251702=note: print w/replies, xml ) Need Help??

in reply to Location of 'use' statements

I like to keeps things local, where possible. For example, if Data::Dumper is only used by one sub in my package, then I'd include it within the scope of that subroutine. Unfortunately, Perl5 can't honour that scoping (subs are package-scoped, not lexical), but it feels nicer to have the use close to where the symbols are used. --Dave

Replies are listed 'Best First'.
Re^2: Location of 'use' statements
by adrianh (Chancellor) on Apr 21, 2003 at 10:02 UTC

    Obviously if it works for you it's a good thing :-)

    However, I've had to maintain code in this style and it's been a complete pain. In particular:

    • You have to scan the whole module to find out what modules are being used.
    • It can lead to confusion when you add a subroutine that clashes with an imported subroutine - since there is no global place where you can find out what subroutines have been imported.
    • You suddenly have modules being loaded at runtime if you decide to use AutoSplit - which can lead to some rather evil debuging sessions.
    • Makes refactoring harder since you have to remember to move the use around when you move the code that uses the module in question.

    In general I've found that pretending use has different scoping rules causes more problems that it solves.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://251702]
[perldigious]: but... but... perldigious is the unvirtuous kind of lazy in this case. :-)
[perldigious]: Just kidding. Thanks 1nickt, I'll go ahead and do it the right way. An extra set of brackets and a little extra indentation isn't too much to ask.
[karlgoethebier]: perldigious: perhaps a block if you are paranoid ;-)
[choroba]: but undef %hash and %hash = () both work, too, but the first one keeps the memory allocated, while the latter makes it available for other parts of the program.
[choroba]: iirc
[perldigious]: karlgoethebier: Well it is a pretty old and complicated (for me) bit of code I wrote (poorly by my current standards), so I'm expecting everything to break when I add the scoping and find out what else is undesireably scope changed. :-)
[perldigious]: Ah, thanks choroba, that sort of thing was precisely what I was wondering when I asked.

How do I use this? | Other CB clients
Other Users?
Others studying the Monastery: (8)
As of 2017-07-21 19:51 GMT
Find Nodes?
    Voting Booth?
    I came, I saw, I ...

    Results (335 votes). Check out past polls.