CPAN(1)

πŸ“¦
version 5.38.2 Β· 2 versions
, in ubuntu noble

πŸ’– 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 a CPAN.pm autobundle with CPAN::Shell->autobundle. cute lil bundle moment 🎁
  • -A module [ module ... ] β€” Shows the primary maintainers for the modules you name. who runs this? found out πŸ‘€
  • -c module β€” Runs a `make clean` in the specified module's directories. tidy up bestie 🧹
  • -C module [ module ... ] β€” Show the Changes</font> files for the specified modules. the receipts! πŸ“œ
  • -D module [ 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, -i is not optional for installing a module when you need to force it:
        % cpan -f -i Module::Foo
  • -F β€” Turn off CPAN.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.
  • -g module [ module ... ] β€” Downloads to the current directory the latest distribution of the module. grabby hands 🫴
  • -G module [ 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 πŸ‘‘
  • -i module [ 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
  • -j Config.pm β€” Load the file that has the CPAN configuration data. This should have the same format as the standard CPAN/Config.pm file, which defines $CPAN::Config as an anonymous hash.
  • -J β€” Dump the configuration in the same format that CPAN.pm uses. 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 πŸ¦‹
  • -L author [ author ... ] β€” List the modules by the specified authors.
  • -m β€” Make the specified modules.
  • -M mirror1,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 with CPAN::Shell->recompile.
  • -s β€” Drop in the CPAN.pm shell. This command does this automatically if you don't specify any arguments.
  • -t module [ 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 and CPAN.pm version 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.

  • -x module [ module ... ] β€” Find close matches to the named modules that you think you might have mistyped. This requires the optional installation of Text::Levenshtein or Text::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:

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 to 1 unless 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 to 1 unless it already has a value (even if that value is false).
  • CPAN_OPTS β€” As with "PERL5OPT", a string of additional cpan(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 or Log::Log4perl if 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. 1 β€” An unknown error
  2. 2 β€” The was an external problem
  3. 4 β€” There was an internal problem with the script
  4. 8 β€” 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 .bat extension

πŸ’– AUTHOR πŸ’–

brian d foy, "<bdfoy@cpan.org>"


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