Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Include Modules Automatically?

by meetraz (Hermit)
on Jan 05, 2009 at 18:58 UTC ( #734244=perlquestion: print w/replies, xml ) Need Help??

meetraz has asked for the wisdom of the Perl Monks concerning the following question:

I have my own library of modules which function sort of like plug-ins:

use MyPlugins::ModuleA; use MyPlugins::ModuleB; use MyPlugins::ModuleC; (etc)

This list is now a couple pages long, and tedious to maintain. Is there an easier way to just automatically include all the modules installed in a certain directory (e.g. MyPlugins) without specifying them manually somewhere?

Or do I have to resort to a File::Find hack?

Replies are listed 'Best First'.
Re: Include Modules Automatically?
by Corion (Patriarch) on Jan 05, 2009 at 19:04 UTC
Re: Include Modules Automatically?
by kennethk (Abbot) on Jan 05, 2009 at 19:41 UTC

    The following module will import every module in directory Foo and export everything the submodules export, and is a potential security risk for pathological file names:

    package Foo; use strict; BEGIN { my @modules = (); opendir DIRHANDLE, 'Foo'; while (my $file = readdir DIRHANDLE) { if ($file =~ /\.pm$/) { $file=~s/\.pm//; push @modules, $file; } } closedir DIRHANDLE; require Exporter; our @ISA = qw(Exporter); our @EXPORT = (); for my $module (@modules) { eval 'use Foo::'.$module; { no strict 'refs'; push @EXPORT, @{"Foo\:\:$module\:\:EXPORT"}; } }; } 1;

    Update: Forgot to close the directory handle.

Re: Include Modules Automatically?
by FunkyMonk (Chancellor) on Jan 05, 2009 at 19:59 UTC
    Try Toolkit. It lets you keep a list of modules to use in a file.
Re: Include Modules Automatically?
by jasonk (Parson) on Jan 06, 2009 at 21:01 UTC

    When they are all similarly named like this, I tend to go for the Module::Find approach:

    package MyPlugins; use Module::Find (); Module::Find::useall( __PACKAGE__ );

    Although you need a bit more than that if the modules are exporting things.


    www.jasonkohles.com
    We're not surrounded, we're in a target-rich environment!

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: perlquestion [id://734244]
Approved by Perlbotics
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others perusing the Monastery: (4)
As of 2022-05-21 13:37 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    Do you prefer to work remotely?



    Results (76 votes). Check out past polls.

    Notices?