Viewing file: cpan (3.75 KB) -rwxr-xr-x Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
#!/usr/bin/perl eval 'exec /usr/bin/perl -S $0 ${1+"$@"}' if $running_under_some_shell; #!/usr/bin/perl # $Id: cpan,v 1.3 2002/08/30 08:55:15 k Exp $ use strict;
=head1 NAME
cpan - easily interact with CPAN from the command line
=head1 SYNOPSIS
# with arguments, installs specified modules cpan module_name [ module_name ... ] # with switches, installs modules with extra behavior cpan [-cimt] module_name [ module_name ... ] # without arguments, starts CPAN shell cpan # without arguments, but some switches cpan [-ahrv]
=head1 DESCRIPTION
This script provides a command interface (not a shell) to CPAN.pm.
=head2 Meta Options
These options are mutually exclusive, and the script processes them in this order: [ahvr]. 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 -h
Prints a help message.
=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.
=over 4
=item c
Runs a `make clean` in the specified module's directories.
=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 cpan -i Netscape::Booksmarks Business::ISBN
=head1 TO DO
* add options for other CPAN::Shell functions autobundle, clean, make, recompile, test
=head1 BUGS
* none noted
=head1 SEE ALSO
Most behaviour, including environment variables and configuration, comes directly from CPAN.pm.
=head1 AUTHOR
brian d foy <bdfoy@cpan.org>
=cut
use CPAN (); use Getopt::Std;
my $VERSION = sprintf "%d.%02d", q$Revision: 1.3 $ =~ m/ (\d+) \. (\d+) /xg;
my $Default = 'default';
my $META_OPTIONS = 'ahvr';
my %CPAN_METHODS = ( $Default => 'install', 'c' => 'clean', 'i' => 'install', 'm' => 'make', 't' => 'test', );
my @cpan_options = grep { $_ ne $Default } sort keys %CPAN_METHODS;
my $arg_count = @ARGV; my %options;
Getopt::Std::getopts( join( '', @cpan_options, $META_OPTIONS ), \%options ); if( $options{h} ) { print STDERR "Printing help message -- ignoring other arguments\n" if $arg_count > 1;
print STDERR "Use perldoc to read the documentation\n"; exit 0; } elsif( $options{v} ) { print STDERR "Printing version message -- ignoring other arguments\n" if $arg_count > 1;
my $CPAN_VERSION = CPAN->VERSION; print STDERR "cpan script version $VERSION\n" . "CPAN.pm version $CPAN_VERSION\n"; exit 0; } elsif( $options{a} ) { print "Creating autobundle in ", $CPAN::Config->{cpan_home}, "/Bundle\n"; print STDERR "Creating autobundle -- ignoring other arguments\n" if $arg_count > 1;
CPAN::Shell->autobundle; exit 0; } elsif( $options{r} ) { print STDERR "Creating autobundle -- ignoring other arguments\n" if $arg_count > 1; CPAN::Shell->recompile; } else { my $switch = ''; foreach my $option ( @cpan_options ) { next unless $options{$option}; $switch = $option; last; } if( not $switch and @ARGV ) { $switch = $Default; } elsif( not $switch and not @ARGV ) { CPAN::shell(); exit 0; } elsif( $switch and not @ARGV ) { die "Nothing to $CPAN_METHODS{$switch}!\n"; }
my $method = $CPAN_METHODS{$switch}; die "CPAN.pm cannot $method!\n" unless CPAN::Shell->can( $method ); foreach my $arg ( @ARGV ) { CPAN::Shell->$method( $arg ); } } 1;
|