App::Cpan(3perl) | Perl Programmers Reference Guide | App::Cpan(3perl) |
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
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.
If the file does not exist, "cpan" dies.
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, ExtUtils::MakeMaker and Module::Build use some, while others matter to the levels above them. Some of these are specified by the Perl Toolchain Gang:
Lancaster Consensus: <https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/lancaster-consensus.md>
Oslo Consensus: <https://github.com/Perl-Toolchain-Gang/toolchain-site/blob/master/oslo-consensus.md>
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
CPAN, App::cpanminus
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 suggested 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-2021, brian d foy, All Rights Reserved.
You may redistribute this under the same terms as Perl itself.
2023-11-25 | perl v5.36.0 |