CPAN(1)
π CPAN(1) π
the Perl Programmers Reference Guide, bestie β yes we're in the CPAN zone, and no, it's not scary, I promise π«Ά
β¨ NAME β¨
cpan β literally just easily interact with CPAN from the command line π
π SYNOPSIS π
okay so here's the vibe, all the ways you can pull up:
# 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]
πΈ DESCRIPTION πΈ
This script gives you a command interface to CPAN β note that's an interface, not a shell π Right now it does the heavy lifting with CPAN.pm, but bestie, listen: it is not a one-shot command runner for CPAN.pm. That's the whole tea. β
π Options π
okay so here's the full roster, no skipping, every single one:
-aβ Creates aCPAN.pmautobundle withCPAN::Shell->autobundle. cute lil bundle moment π-Amodule [ module ... ] β Shows the primary maintainers for the modules you name. who runs this? found out π-cmodule β Runs a`make clean`in the specified module's directories. tidy up bestie π§Ή-Cmodule [ module ... ] β Show the Changes</font> files for the specified modules. the receipts! π-Dmodule [ module ... ] β Show the module details. This prints one line for each out-of-date module (meaning, modules locally installed but have newer versions on CPAN). Each line has three columns: module name, local version, and CPAN version. three lil columns of truth β¨-fβ Force the specified action, when it normally would have failed. Use this to install a module even if its tests fail. When you use this option,-iis not optional for installing a module when you need to force it:
% cpan -f -i Module::Foo
-Fβ Turn offCPAN.pm's attempts to lock anything. β οΈ You should be careful with this since you might end up with multiple scripts trying to muck in the same directory. This isn't so much of a concern if you're loading a special config with"-j", and that config sets up its own work directories.-gmodule [ module ... ] β Downloads to the current directory the latest distribution of the module. grabby hands π«΄-Gmodule [ module ... ] β UNIMPLEMENTED π
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β Print a help message and exit. When you specify"-h", it ignores all of the other options and arguments. main character behavior fr fr π-imodule [ module ... ] β Install the specified modules. With no other switches, this switch is implied. the default slay π-Iβ Load"local::lib"(think like"-I"for loading lib paths). Too bad"-l"was already taken. π the lore-jConfig.pm β Load the file that has the CPAN configuration data. This should have the same format as the standardCPAN/Config.pmfile, which defines$CPAN::Configas an anonymous hash.-Jβ Dump the configuration in the same format thatCPAN.pmuses. This is useful for checking the configuration as well as using the dump as a starting point for a new, custom configuration. config copy-paste core π-lβ List all installed modules with their versions. the inventory check π¦-Lauthor [ author ... ] β List the modules by the specified authors.-mβ Make the specified modules.-Mmirror1,mirror2,... β A comma-separated list of mirrors to use for just this run. The"-P"option can find them for you automatically.-nβ Do a dry run, but don't actually install anything. (unimplemented) π-Oβ Show the out-of-date modules.-pβ Ping the configured mirrors and print a report. π-Pβ Find the best mirrors you could be using and use them for the current session. glow up your downloads β¨-rβ Recompiles dynamically loaded modules withCPAN::Shell->recompile.-sβ Drop in theCPAN.pmshell. This command does this automatically if you don't specify any arguments.-tmodule [ module ... ] β Run a`make test`on the specified modules. π§ͺ-Tβ Do not test modules. Simply install them. living dangerously, respect π«Ά-uβ Upgrade all installed modules. β οΈ Blindly doing this can really break things, so keep a backup. like actually please back up bestie π-vβ Print the script version andCPAN.pmversion then exit.-Vβ Print detailed information about the cpan client.-wβ UNIMPLEMENTED π
Turn on cpan warnings. This checks various things, like directory permissions, and tells you about problems you might have.
-xmodule [ module ... ] β Find close matches to the named modules that you think you might have mistyped. This requires the optional installation ofText::LevenshteinorText::Levenshtein::Damerau. typo rescue π§-Xβ Dump all the namespaces to standard output. all of them. every single one. π
π Examples π
steal these, they're good:
# 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
π¦ Environment variables π¦
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>
and now the vars themselves:
NONINTERACTIVE_TESTINGβ Assume no one is paying attention and skips prompts for distributions that do that correctly.cpan(1)sets this to1unless it already has a value (even if that value is false).PERL_MM_USE_DEFAULTβ Use the default answer for a prompted questions.cpan(1)sets this to1unless it already has a value (even if that value is false).CPAN_OPTSβ As with"PERL5OPT", a string of additionalcpan(1)options to add to those you specify on the command line.CPANSCRIPT_LOGLEVELβ The log level to use, with either the embedded, minimal logger orLog::Log4perlif it is installed. Possible values are the same as the"Log::Log4perl"levels:"TRACE","DEBUG","INFO","WARN","ERROR", and"FATAL". The default is"INFO".GIT_COMMANDβ The path to the"git"binary to use for the Git features. The default is"/usr/local/bin/git".
β EXIT VALUES β
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 error2β The was an external problem4β There was an internal problem with the script8β A module failed to install
not me reading "The was an external problem" β that's the original wording bestie, I'm not touching it π
π TO DO π
- one shot configuration values from the command line
π BUGS π
- none noted
(the dream, honestly)
π SEE ALSO π
Most behaviour, including environment variables and configuration, comes directly from CPAN.pm. iykyk π
π SOURCE AVAILABILITY π
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.
π CREDITS π
- 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.batextension
π AUTHOR π
brian d foy, "<bdfoy@cpan.org>"
β¨ COPYRIGHT β¨
Copyright (c) 2001-2015, brian d foy, All Rights Reserved.
You may redistribute this under the same terms as Perl itself.
and that's the whole page, bestie π«Ά this was perl v5.38.2, dated 2026-09-14, and it's the CPAN(1) page β go install something cute, ily, bye π
πΈ
π¦ where this page comes from
- ubuntu noble: libperl5.38t64 5.38.2-3.2ubuntu0.6 Β· GPL-1.0-or-later OR Artistic-1.0-Perl
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms