Env::Modulecmd - Interface to modulecmd from Perl
# import bootstraps, executed at compile-time # explicit operations use Env::Modulecmd { load => 'foo/1.0', unload => ['bar/1.0', 'baz/1.0'], }; # implied loading use Env::Modulecmd qw(quux/1.0 quuux/1.0); # hybrid use Env::Modulecmd ('bazola/1.0', 'ztesch/1.0', { load => 'oogle/1.0', unload => [qw(foogle/1.0 boogle/1.0)], } ); # implicit functions, executed at run-time Env::Modulecmd::load (qw(fred/1.0 jim/1.0 sheila/barney/1.0)); Env::Modulecmd::unload ('corge/grault/1.0', 'flarp/1.0'); Env::Modulecmd::pippo ('pluto/paperino/1.0');
Env::Modulecmd provides an automated interface to modulecmd from Perl. The most straightforward use of Env::Modulecmd is for loading and unloading modules at compile time, although many other uses are provided.
Env::Modulecmd
modulecmd
In general, Env::Modulecmd works by making a system call to 'modulecmd perl [cmd] [module]', under the assumption that modulecmd is in your PATH. If you set the environment variable PERL_MODULECMD, Env::Modulecmd will use that value in place of modulecmd. If modulecmd is not found, the shell will return an error and the script will die.
modulecmd perl [cmd] [module]
PERL_MODULECMD
If modulecmd outputs anything to standard error, it is assumed to have failed. In this case, its error output is repeated on Perl's standard error, and the script dies. Otherwise, modulecmd is assumed to have succeeded, and its output (if any) is eval'ed.
eval
If you attempt to load a module which has already been loaded, or perform some other benign operation, modulecmd will generate neither output nor error; this condition is silently ignored.
You can specify compile-time arguments to Env::Modulecmd on the use line, as follows:
use
use Env::Modulecmd ('bazola/1.0', 'ztesch/1.0', { load => 'oogle/1.0', unload => [qw(foogle/1.0 boogle/1.0)], } );
Each argument is assumed to be either a scalar or a hashref. If it's a scalar, Env::Modulecmd assumes it's the name of a module you want to load. If it's a hashref, then each key is the name of a modulecmd operation (ie: load, unload) and each value is either a scalar (operate on one module) or an arrayref (operate on several modules).
load
unload
In the example given above, bazola/1.0 and ztesch/1.0 will be loaded by implicit usage. oogle/1.0 will be loaded explicitly, and foogle/1.0 and boogle/1.0 will be unloaded.
bazola/1.0
ztesch/1.0
oogle/1.0
foogle/1.0
boogle/1.0
Additional module operations can be performed at run-time by using implicit functions. For example:
Env::Modulecmd::load (qw(fred/1.0 jim/1.0 sheila/barney/1.0)); Env::Modulecmd::unload ('corge/grault/1.0', 'flarp/1.0'); Env::Modulecmd::pippo ('pluto/paperino/1.0');
Each function name is passed as a command name to modulecmd, and each call can include one or more modules to be processed. The example above will generate the following six calls to modulecmd:
modulecmd perl load fred/1.0 modulecmd perl load jim/1.0 modulecmd perl load sheila/barney/1.0 modulecmd perl unload corge/grault/1.0 modulecmd perl unload flarp/1.0 modulecmd perl pippo pluto/paperino/1.0
For more information about modules, see the module(1) manpage or http://www.modules.org.
If you find any bugs, or if you have any suggestions for improvement, please contact the author.
Ron Isaacson <Ron.Isaacson@morganstanley.com>
Copyright (c) 2001, Morgan Stanley Dean Witter and Co.
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.
A copy of the GNU General Public License was distributed with this program in a file called LICENSE. For additional copies, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, USA.
To install Env::Modulecmd, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Env::Modulecmd
CPAN shell
perl -MCPAN -e shell install Env::Modulecmd
For more information on module installation, please visit the detailed CPAN module installation guide.