mirror of
https://github.com/envmodules/modules.git
synced 2026-06-18 00:06:53 +08:00
modules CVS repository. * Added README.perl describing Ron Isaacson's Env::Modulecmd perl module (Ron.Isaacson@morganstanley.com). * Added further tests for modulefile "module use dir_path" * Fixed bug of unloading a modulefile with a "module use dir_path"
164 lines
5.8 KiB
Perl
164 lines
5.8 KiB
Perl
Ron Isaacson <Ron.Isaacson@morganstanley.com>
|
|
Subject: Perl Env::Modulecmd
|
|
|
|
Here at Morgan Stanley, we make extensive use of modulefiles. We have at
|
|
least one Perl package that requires that a particular modulefile be
|
|
loaded, or it will not function. I decided to develop a Perl module to
|
|
automate this process. (Actually, the most difficult part was not
|
|
confusing everybody with the dual meaning of the term "module"! Heh...)
|
|
|
|
There is now a module on CPAN called Env::Modulecmd. You can download it
|
|
from your favorite CPAN mirror, or directly from the main CPAN site at
|
|
http://www.cpan.org/authors/id/I/IS/ISAACSON/Env-Modulecmd-1.0.tar.gz .
|
|
Documentation is included, and the module is very easy to install and
|
|
use.
|
|
|
|
|
|
If you try out this module and have any feedback (positive or negative),
|
|
please pass it along. Suggestions and bug reports are welcome.
|
|
|
|
--
|
|
Ron Isaacson
|
|
Morgan Stanley
|
|
ron.isaacson@morganstanley.com / (718) 754-2345
|
|
|
|
------------------------------------------------------------------------
|
|
This README file was added to Modules-3.1.3 if you are reading this in a
|
|
later version, be sure to look for later versions of Env-Modulecmd-x.y.tar.gz
|
|
at http://www.cpan.org/authors/id/I/IS/ISAACSON/
|
|
------------------------------------------------------------------------
|
|
perldoc for Env::Modulecmd
|
|
|
|
NAME
|
|
Env::Modulecmd - Interface to modulecmd from Perl
|
|
|
|
SYNOPSIS
|
|
# 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');
|
|
|
|
|
|
DESCRIPTION
|
|
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.
|
|
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
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.
|
|
|
|
Compile-Time Usage
|
|
|
|
You can specify compile-time arguments to Env::Modulecmd
|
|
on the use line, as follows:
|
|
|
|
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).
|
|
|
|
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.
|
|
|
|
Run-Time Usage
|
|
|
|
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
|
|
|
|
|
|
SEE ALSO
|
|
For more information about modules, see the module(1)
|
|
manpage or http://www.modules.org.
|
|
|
|
BUGS
|
|
If you find any bugs, or if you have any suggestions for
|
|
improvement, please contact the author.
|
|
|
|
AUTHOR
|
|
Ron Isaacson <Ron.Isaacson@morganstanley.com>
|
|
|
|
COPYRIGHT
|
|
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.
|
|
|