Module::Lazy - postpone module loading until actually used
use Module::Lazy 'My::Module';
This creates a fake package My::Module with
my $object = My::Module->new; my $value = My::Module::some_function();
Either of these triggers loading My::Module in full.
Preload all lazy methods right away, forbid further lazy-loading. This may be useful for long-running, mission-critical apps.
use Module::Lazy; Module::Lazu->unimport();
Ditto, but at runtime (say after parsing command-line parameters and before daemonizing).
Sure, there are some caveats with using it, but maybe it's still helpful for your project. We managed to reduce test suite execution time from ~17 to ~9 minutes with this one.