App::Cpan - easily interact with CPAN from the command line |
App::Cpan - easily interact with CPAN from the command line
# with arguments and no switches, installs specified modules cpan module_name [ module_name ... ]
# with switches, installs modules with extra behavior cpan [-cfFimtTw] module_name [ module_name ... ]
# use local::lib cpan -I module_name [ module_name ... ]
# one time mirror override for faster mirrors cpan -p ...
# with just the dot, install from the distribution in the # current directory cpan .
# without arguments, starts CPAN.pm shell cpan
# without arguments, but some switches cpan [-ahpruvACDLOPX]
This script provides a command interface (not a shell) to CPAN. At the moment it uses CPAN.pm to do the work, but it is not a one-shot command runner for CPAN.pm.
% cpan -f -i Module::Foo
-j
, and that config sets up its own work directories.
Download to the current directory the latest distribution of the modules, unpack each distribution, and create a git repository for each distribution.
If you want this feature, check out Yanick Champoux's Git::CPAN::Patch
distribution.
-h
, it ignores all
of the other options and arguments.
local::lib
(think like -I
for loading lib paths). Too bad
-l
was already taken.
$CPAN::Config
as an anonymous hash.
If the file does not exist, cpan
dies.
-P
option can find them for you automatically.
Turn on cpan warnings. This checks various things, like directory permissions, and tells you about problems you might have.
# print a help message cpan -h
# print the version numbers cpan -v
# create an autobundle cpan -a
# recompile modules cpan -r
# upgrade all installed modules cpan -u
# install modules ( sole -i is optional ) cpan -i Netscape::Booksmarks Business::ISBN
# force install modules ( must use -i ) cpan -fi CGI::Minimal URI
# install modules but without testing them cpan -Ti CGI::Minimal URI
There are several components in CPAN.pm that use environment variables. The build tools, the ExtUtils::MakeMaker manpage and the Module::Build manpage use some, while others matter to the levels above them. Some of these are specified by the Perl Toolchain Gang:
Lancaster Concensus: https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md
Oslo Concensus: https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/oslo-consensus.md
cpan(1)
sets this to 1
unless it already
has a value (even if that value is false).
cpan(1)
sets this
to 1
unless it already has a value (even if that value is false).
PERL5OPT
, a string of additional cpan(1)
options to
add to those you specify on the command line.
Log::Log4perl
levels: TRACE
, DEBUG
, INFO
, WARN
,
ERROR
, and FATAL
. The default is INFO
.
git
binary to use for the Git features. The default
is /usr/local/bin/git
.
run()
The run
method returns 0 on success and a positive number on
failure. See the section on EXIT CODES for details on the values.
CPAN.pm sends all the good stuff either to STDOUT, or to a temp file if $CPAN::Be_Silent is set. I have to intercept that output so I can find out what happened.
Stolen from File::Path::Expand
The script exits with zero if it thinks that everything worked, or a positive number if it thinks that something failed. Note, however, that in some cases it has to divine a failure by the output of things it does not control. For now, the exit codes are vague:
1 An unknown error
2 The was an external problem
4 There was an internal problem with the script
8 A module failed to install
* There is initial support for Log4perl if it is available, but I haven't gone through everything to make the NullLogger work out correctly if Log4perl is not installed.
* When I capture CPAN.pm output, I need to check for errors and report them to the user.
* Warnings switch
* Check then exit
* none noted
the CPAN manpage, the App::cpanminus manpage
This code is in Github in the CPAN.pm repository:
https://github.com/andk/cpanpm
The source used to be tracked separately in another GitHub repo, but the canonical source is now in the above repo.
Japheth Cleaver added the bits to allow a forced install (-f
).
Jim Brandt suggest and provided the initial implementation for the up-to-date and Changes features.
Adam Kennedy pointed out that exit()
causes problems on Windows
where this script ends up with a .bat extension
David Golden helps integrate this into the CPAN.pm
repos.
Jim Keenan fixed up various issues with _download
brian d foy, <bdfoy@cpan.org>
Copyright (c) 2001-2018, brian d foy, All Rights Reserved.
You may redistribute this under the same terms as Perl itself.
App::Cpan - easily interact with CPAN from the command line |