| CPAN-AutoINC documentation | Contained in the CPAN-AutoINC distribution. |
CPAN::AutoINC - Download and install CPAN modules upon first use
perl -MCPAN::AutoINC <script>
When CPAN::AutoINC is loaded, it will add itself to @INC and catch any requests for missing resources. If a Perl module is requested CPAN will be queried and, assuming that the module exists on CPAN, CPAN::Shell will be invoked to install it. Execution of the script continues after the requisite module has been installed.
CPAN::AutoINC is a slightly useful tool designed to streamline the process of installing all of the modules required by a script. By loading the CPAN::AutoINC module (usually via a "-MCPAN::AutoINC" command-line option), the user is registering a handler that will catch any attempt to use a module that does not exist on the local machine. In this case, the CPAN::Shell module will be invoked to search for the specified module and, if found, an attempt will be made to install the module. If successful, the module will be loaded and execution will continue as normal.
For example:
perl -MCPAN::AutoINC -MLingua::Num2Word=cardinal -le 'print cardinal("en", 42)'
...will download and install Lingua::Num2Word and Lingua::EN::Num2Word.
perl -MCPAN::AutoINC -MLingua::Num2Word=cardinal -le 'print cardinal("de", 42)'
...will then download and install Lingua::DE::Num2Word (German).
perl -MCPAN::AutoINC -MLingua::Num2Word=cardinal -le 'print cardinal("es", 42)'
...will then download and install Lingua::ES::Numeros (Spanish).
| CPAN-AutoINC documentation | Contained in the CPAN-AutoINC distribution. |
package CPAN::AutoINC; use strict; use CPAN; our $VERSION = '0.01'; sub new { my ($this) = shift; my ($class) = ref($this) || $this; my $self = bless({}, $class); return $self; } sub CPAN::AutoINC::INC { my ($self, $filename) = @_; if ($filename =~ /^(.+)\.pm$/) { my $module = $1; $module =~ s!/!::!g; foreach my $m (expand("Module", $module)) { CPAN::Shell->install($m); foreach my $prefix (@INC) { my $realfilename = "$prefix/$filename"; if (-f $realfilename) { my $fh; return $fh if (open ($fh, $realfilename)); } } } } return undef; } BEGIN { push (@INC, new CPAN::AutoINC()); }; 1; __END__