#!/usr/bin/perl
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
	if $running_under_some_shell;
#!/usr/bin/perl
# $Id: cpan,v 1.9 2006/11/01 21:49:31 comdog Exp $
use strict;

=head1 NAME

cpan - easily interact with CPAN from the command line

=head1 SYNOPSIS

	# with arguments and no switches, installs specified modules
	cpan module_name [ module_name ... ]

	# with switches, installs modules with extra behavior
	cpan [-cfimt] module_name [ module_name ... ]

	# without arguments, starts CPAN.pm shell
	cpan

	# without arguments, but some switches
	cpan [-ahrvACDLO]

=head1 DESCRIPTION

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.

=head2 Meta Options

These options are mutually exclusive, and the script processes them in
this order: [hvCAar].  Once the script finds one, it ignores the others,
and then exits after it finishes the task.  The script ignores any other
command line options.

=over 4

=item -a

Creates the CPAN.pm autobundle with CPAN::Shell->autobundle.

=item -A module [ module ... ]

Shows the primary maintainers for the specified modules

=item -C module [ module ... ]

Show the C<Changes> files for the specified modules

=item -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.

=item -L author [ author ... ]

List the modules by the specified authors.

=item -h

Prints a help message.

=item -O

Show the out-of-date modules.

=item -r

Recompiles dynamically loaded modules with CPAN::Shell->recompile.

=item -v

Print the script version and CPAN.pm version.

=back

=head2 Module options

These options are mutually exclusive, and the script processes them in
alphabetical order. It only processes the first one it finds.

=over 4

=item c

Runs a `make clean` in the specified module's directories.

=item f

Forces the specified action, when it normally would have failed.

=item i

Installed the specified modules.

=item m

Makes the specified modules.

=item t

Runs a `make test` on the specified modules.

=back

=head2 Examples

	# print a help message
	cpan -h

	# print the version numbers
	cpan -v

	# create an autobundle
	cpan -a

	# recompile modules
	cpan -r

	# install modules ( sole -i is optional )
	cpan -i Netscape::Booksmarks Business::ISBN

	# force install modules ( must use -i )
	cpan -fi CGI::Minimal URI

=head1 TO DO


=head1 BUGS

* none noted

=head1 SEE ALSO

Most behaviour, including environment variables and configuration,
comes directly from CPAN.pm.

=head1 SOURCE AVAILABILITY

This source is part of a SourceForge project which always has the
latest sources in CVS, as well as all of the previous releases.

	http://sourceforge.net/projects/brian-d-foy/

If, for some reason, I disappear from the world, one of the other
members of the project can shepherd this module appropriately.

=head1 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

=head1 AUTHOR

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

=head1 COPYRIGHT

Copyright (c) 2001-2006, brian d foy, All Rights Reserved.

You may redistribute this under the same terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();
use Getopt::Std;

myme terms as Perl itself.

=cut

use CPAN ();