in reply to (ar0n: require) Re: Load only if needed
in thread Load only if needed
One thing that my drunk friend failed to mention, is that you have to write your code such that the require doesn't get run unless you need the module. For example, this code:
isn't going to help your problem. But, this code:require Magic::SuperAndSpiffy::ButSlow; sub neatTrick { # ... }
will only load the ButSlow.pm code the first time neatTrick is called.sub neatTrick { require Magic::SuperAndSpiffy::ButSlow; # ... }
Now, if you are currently useing the big module, then things get a bit trickier. First, try chaning your code from: use Magic::SuperAndSpiffy::ButSlow qw( Stuff Junk ); to:
and see what breaks. Anything that breaks was code that depended on things that were happening at compile time because of your use statement. I think those should mostly be pretty easy to fix. Then you can move the require and import code so that it only gets called when you need it.require Magic::SuperAndSpiffy::ButSlow; Magic::SuperAndSpiffy::ButSlow->import( qw( Stuff Junk ) );
Note, however, that import should only be called once (calling require multiple times doesn't hurt by design). You can also just try leaving out the import and see what breaks and whether you'd just rather fix that instead of figuring out a slick way to call import only once the first time you need it.
- tye (but my friends call me "Tye")
|
|---|