> -----Original Message-----
> From: Elaine -HFB- Ashton [mailto:[EMAIL PROTECTED]]
> Sent: Friday, November 16, 2001 10:28 AM
> To: [EMAIL PROTECTED]
> Cc: Ray Murphy; [EMAIL PROTECTED]
> Subject: Re: Modules
> 
> 
> Jeff 'japhy' Pinyan [[EMAIL PROTECTED]] quoth:
> *>On Nov 16, Ray Murphy said:
> *>
> *>>When using modules, is it better to say 'use
> *>>Foo::Bar;' rather than 'require'.  Also I've noticed
> *>>that some people put their 'use' or 'require'
> *>>statements in subroutines and not at the beginning of
> *>>the program - what benefits does this serve - conserve
> *>>memory because as soon as you've left the routine the
> *>>module goes bye bye (guessing)??  But surely the
> *>>library would have to compile everytime the subroutine
> *>>would be called and therefore slow the program down
> *>>somewhat (again, guessing).
> *>
> *>The FAQ has an answer for this: "What's the difference 
> between require and
> *>use?"  Check http://www.perldoc.com/, and look in perlfaq8.
> *>
> *>The skinny is this:
> *>
> *>  1. require() happens at run-time, and either takes a 
> bareword module
> *>     name or a path to a file (not necessarily a module)
> *>  2. use() happens at compile-time (so putting it in a 
> function doesn't
> *>     "help") and it involves require()ing a module and then 
> calling its
> *>     import() method
> 
> In practical daily use, use(); is preferred as since it compiles the
> module as soon as it sees 'use Foo::Bar;' before moving on, this will
> catch errors and scope conflicts far sooner than if you use require();
> There aren't many good reasons to use require, at least I 
> can't think of
> any. When in doubt, use use(); :)
> 
> If you see a lot of 'requires' in subroutines, I suspect someone just
> didn't get scope or wrote a quick hack so performance is the 
> least of the
> codes worries. 

require() is handy inside an eval { } block to trap whether a module
is installed or not. Many CPAN modules use this technique.

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to