Module::Husbandry - build and manage perl modules in a Perl module distribution
my @specs = parse_module_specs @ARGV, \%options;
Parses a module specification, one of:
Foo Foo::Bar lib/Foo.pm lib/Foo/Bar.pm lib/Foo/Bar.pod
and returns the package name (Foo::Bar) and the path to the file (lib/Foo/Bar.pm) for each parameter in a hash. The result HASHes look like:
Foo::Bar
lib/Foo/Bar.pm
{ Filename => "lib/Foo/Bar.pm", Package => "Foo::Bar", Spec => $spec, ## What was passed in };
Any name containing characters other that A-Z, 0-9, :, or ' are assumed to be filenames. Filenames should begin with lib/ (or LIB/ on Win32) or will be warned about.
The only option provided is:
as_dir Set this to 1 to suppress the add "/" instead of ".pm" the Filename when a module name is converted to a filename. Does not affect anything when a filename is parsed. This is used by mvpm's recurse option.
my @specs = parse_bin_specs @ARGV, \%options;
Parses specifications for a "bin" program, like:
foo bin/foo
and returns the program name (foo) and the path to the file (bin/foo) for each parameter in a hash. The result HASHes look like:
foo
bin/foo
{ Filename => "bin/foo", Program => "foo", Spec => $spec, ## What was passed in };
If a spec has no directory separators, "bin/" is prepended. If a spec has directory separator, no "bin/" is prepended.
Takes a list of distributions specs (Foo::Bar, Foo-Bar) and returns a hash like
{ Package => "Foo::Bar", Spec => $spec, }
Runs perl Makefile.PL using the current Perl.
TODO: Support Module::Build methodology.
add_to_MANIFEST "foo", "bar";
Adds one or more files to the MANIFEST.
rm_from_MANIFEST "foo", "bar";
Remove one or more files to the MANIFEST.
install_file $from_file_hash, $to_file_hash, \%macros;
Locates the approptiate file in the .newpm directory and copies it, instantiating any <%macros%> needed.
Reads <%meta foo bar %> and <%meta foo=bar %> tags.
Meta tags ========= <%meta chmod 0755 %> chmod the resulting file (numeric only)
Any unrecognized meta or macro tags are ignored with a warning.
Adds file to MANIFEST.
TODO: adapt to Module::Build's manifesting procedures.
my @from_files = templates_for @to_files;
Given a list of files to write to, find the appropriate source files.
my @test_scripts = test_scripts_for @modules;
Returns test scripts for any .pm and .pl file in @modules:
{ Filename => "t/Foo.t", }
where @modules is an array of HASHes returned by parse_module_specs.
my %skel_map = skeleton_files $target_dir;
Returns a list of from/to files to install from the skeleton directory.
cppm $from, $to, \%options
Copies a file in a distribution and a related test suite (if found).
TODO: Don't rewrite changelogs. Not sure how best to recognize them; this could be an option for the mythical .newpmrc.
TODO: Make the filename substitutions patterns case insensitive on Win32?
Create new modules in ./lib/... and, if it's a .pm module, a test suite in ./t/...
Does not build the make file.
Create new script files in bin/. Does not add a test script (since there's no safe way to test an arbitrary program).
Create a new distribution in . and populate it from the skeleton files. newpm() a new module.
mvpm $from, $to, \%options
Changes the name of a file in a distribution and all occurences of the file's name (and, if applicable, package name) in it and in all other files.
A backup of any files changed is placed in .newpm/bak_0000 (where 0000 increments each time).
TODO: some kind of locking so simultaneous mvpms don't happen to choose the same backup directory name.
Removes any modules and tests named after a package (or module) name.
Warns about any other files that refer to the doomed package.
A backup is made in the backup directory (.mvpm/... for now, will change)..
TODO: Allow a site-specific rm command to be used, like 'trash', so this command may be better integrated with a user's working environment. This will wait until we restructure the directories.
my ( $options, @params ) = parse_options @ARGV, \%spec;
Reads the command line and parses out the options and other parameters. Options may be intermixed with parameters.
Options -h|-?|--help and -- do the normal things always.
-n|--describe print out what *would* happen, but do nothing.
ASSumes a dir tree and file naming conventions like:
Foo-Bar/ Makefile.PL ... lib/Foo/Bar.pm t/Foo-Bar.pm
This probably won't work out all that well for XS distributions, not sure how they work. Let me know and we'll see if we can add it :)
Not tested on Win32.
Does not know about Module::Build.
Does not use anything like a .newpmrc file.
Copyright 2002, R. Barrie Slaymaker, Jr., All Rights Reserved
You may use this module under the terms of the BSD, Artistic, oir GPL licenses, any version.
Barrie Slaymaker <barries@slaysys.com>
To install Module::Husbandry, copy and paste the appropriate command in to your terminal.
cpanm
cpanm Module::Husbandry
CPAN shell
perl -MCPAN -e shell install Module::Husbandry
For more information on module installation, please visit the detailed CPAN module installation guide.