FAQ (Frequently Asked Questions)

Questions

  1. How can I explicitly run the configuration?
  2. How often are index files reloaded?
  3. Are multiple configurations possible?
  4. Why can't I upgrade Perl with CPANPLUS?
  5. I think I've found a bug in CPANPLUS. How can I see if it has been reported?
  6. How can I use CPANPLUS with multiple versions of Perl?
  7. How can I get CPANPLUS to use my proxy?
  8. I want to execute certain commands whenever I start the shell (for example, set my proxy for a laptop that moves between networks). How can I do that?
  9. CPANPLUS reports that it is going to fetch during an initial install, but it hangs for a long time then reports a failure.
  10. I upgraded my version of CPANPLUS and something no longer works the same way
  11. Can CPANPLUS do <random something>
  12. Why not make <some change> to the default shell?
  13. What is the lowest version of Perl CPANPLUS works under?
  14. On what platforms has CPANPLUS been tested?
  15. How much CPANPLUS.pm code comes from CPAN.pm?
  16. How can I install modules if I'm not root?
  17. Can I let different users on my system use CPANPLUS?
  18. Can I use a local mirror (such as a CD), but fall back to a public mirror if my files are out of date?

Answers

How can I explicitly run the configuration?
You can use the Setup.pm module, which will replace your existing configuration:

perl -MCPANPLUS::Configure::Setup -e 'CPANPLUS::Configure::Setup->init()'
For more information, refer to the CPANPLUS::Configure::Setup documentation.

How often are index files reloaded
CPANPLUS uses lazy loading, so index files are only fetched when you start to use them (this means that if you leave the shell running for 5 days, they will only be fetched for your first search, not for one you run several days later). If they are older than one day at that time, they will be fetched. You can force a reload with the Backend method $cp->reload_indices(update_source => 1);, or the command x in the default shell.

Are multiple configurations possible?
As of version 0.04, it is possible to have different configuration files for different users. Simply save a valid configuration in a different location and set the user's PERL5_CPANPLUS_CONFIG environment variable to point to the location of the file.

Why can't I upgrade Perl with CPANPLUS?
Although CPAN.pm did permit you to upgrade your version of Perl, CPANPLUS does not although you can still download a new version of Perl with CPANPLUS. The decision was made not to permit this in CPANPLUS because there is no reliable, cross-platform method that we know of to automatically install Perl (which includes running configure). Installing a new version of Perl is not trivial and is best done by hand.

I think I've found a bug in CPANPLUS. How can I see if it has been reported?
The CPANPLUS bugs mailing list archive is available at geocrawler.

How can I use CPANPLUS with multiple versions of Perl?
You only need one installation of CPANPLUS for all versions of Perl. As of version 0.04, CPANPLUS keeps different directories under its home directory for each version of Perl:

    .cpanplus/
        authors/
            id/     # tarballs live here
        5.6.0/
            build/
        5.7.3/
            build/
This prevents conflicts. You can install CPANPLUS for both versions of Perl and then point them at the same home directory for CPANPLUS. You can then invoke the CPANPLUS for a particular version with the -M command-line syntax:
    perl5.6.0 -MCPANPLUS -e 'shell'
There is a caveat: 5.6.x and 5.7.x and higher are not binary compatible, which means that if you have the same version of storable for both Perl installs, storable will be confused and most likely read the stored source files incorrectly. This is not a problem if you have different versions of storable, because different source files are kept for each version of storable used.

You can also install just one version of CPANPLUS for one version of Perl, and, where appropriate, in the Backend methods, send another Perl binary as an argument:

    perl => /home/kane/myperl/perl
to override the Perl you invoked the script with.

How can I get CPANPLUS to use my proxy?
CPANPLUS currently only supports proxies with LWP::UserAgent. You will need to set your environment variables accordingly. For example, to use an ftp proxy:

    $ENV{ftp_proxy} = 'foo.com';
Refer to the LWP::UserAgent manpage for more details.

I want to execute certain commands whenever I start the shell (for example, set my proxy for a laptop that moves between networks). How can I do that?
The easiest way is to create a wrapper for shell which includes the modifications you desire. For instance:

    #!/usr/bin/perl

    BEGIN {
        $ENV{ftp_proxy} = 'current.domain.org';
    }

    use CPANPLUS;
    shell();

CPANPLUS reports that it is going to fetch during an initial install, but it hangs for a long time then reports a failure.
In versions before 0.04, CPANPLUS was designed to fetch initial files exclusively from ftp.cpan.org on the assumption this site would always be available. If CPANPLUS hangs during the initial fetch, it could mean that ftp.cpan.org is unavailable. This is only a problem for installation, as your own host list will be used once CPANPLUS is installed. A work-around is to edit Config.pm-orig in lib/CPANPLUS in the CPANPLUS directory. Under the hash key _ftp there's a key urilist. Near that should be the line 'host' => 'ftp.cpan.org'. Simply replace this host with another one.

I upgraded my version of CPANPLUS and something no longer works the same way.
The CPANPLUS interface will only be backwards-compatible with itself after version 1.0. This gives us a chance to correct and expand without being locked to an interface in early versions. Two things that have notably changed since the first version are the configuration and some Backend return values.

Can CPANPLUS do <random something>?
If it has to do with installing modules, most likely! Keep in mind that while the default shell may not be able to do something like "install all modules in the POE namespace" you can easily make something of the sort, using Backend.

Why not make <some change> to the default shell?
The default shell is designed to be what the developers wanted in a shell. If it doesn't do what you want, consider writing your own with Backend, and possibly releasing it in the CPANPLUS::Shell:: namespace. You can also change your default shell to be any other CPANPLUS shell you have installed.

What is the lowest version of Perl CPANPLUS works under?
Reliably under 5.005_03.

On what platforms has CPANPLUS been tested?
FreeBSD, Linux, Win32, Solaris, VMS, Darwin (Mac OS X) and Cygwin.

How much CPANPLUS.pm code comes from CPAN.pm?
None.

How can I install modules if I'm not root?
Set makemakerflags to something like this:

    LIB=~/perl/lib INSTALLMAN1DIR=~/perl/man/man1 INSTALLMAN3DIR=~/perl/man/man3
Of course you should replace 'perl' with the appropriate directory.

Also, be sure never to use UNINST=1 in makeflags.

Can I let different users on my system use CPANPLUS?
Currently, it is not possible to have multiple setup files, so all users will use the same repository and configuration.

Can I use a local mirror (such as a CD), but fall back to a public mirror if my files are out of date?
To do this you need to ensure that you have an up-to-date listing of modules so that if the most recent version of a module isn't found in the local mirror, CPANPLUS will try to get it from the external mirror.

In your setup, list only complete mirrors. This way you will get a current listing from one of them when you start CPANPLUS.

Next, add your local mirror at runtime so that it becomes the new first choice.

In this example a CD from another server on the network is added (leave off the host argument if it is on the local machine):

   my $cb = new CPANPLUS::Backend;

   my $conf = $cb->configure_object;
   $conf->_set_ftp(urilist => [ {
      path   => '/mnt/cdrom',
      scheme => 'file',
      host   => '//server',
   }, @{ $conf->_get_ftp('urilist') } ]);

Thanks to Nick Clark for asking this at the 2002 German Perl Workshop.