Beefy Boxes and Bandwidth Generously Provided by pair Networks
Problems? Is your data what you think it is?
 
PerlMonks  

Automatic module installation

by Juerd (Abbot)
on May 23, 2002 at 08:03 UTC ( [id://168693]=CUFP: print w/replies, xml ) Need Help??

Let's assume you have a recent Perl and CPANPLUS installed. You want your brand new script to automatically install any modules that are not found. Well, maybe you don't. I'm sure I don't, but I couldn't resist the temptation and made Blah.pm. The module name describes exactly what it does, or... no it doesn't... but I needed a name.

My first try had a $SIG{__DIE__} handler and die "Try again :)\n", but it still didn't look nice. I did this because you cannot resurrect scripts. Kane had the idea of using exec($^X, $0, @ARGV) instead, which worked perfectly. But then, lathos suggested using a code ref in @INC. With the help of this node, I created this:

Blah.pm

use strict; use CPANPLUS; push @INC, sub { my ($code, $file) = @_; my $module = $file; $module =~ s!/!::!g; $module =~ s!\.pm$!!g; install($module); for (@INC) { next if ref; if (-e "$_/$file" and -r _) { open my $fh, '<', "$_/$file" or die $!; return $fh; } } return undef; };
Please note that real programmers don't use CPANPLUS but CPANPLUS::Backend, and use the great backend. I was lazy and used CPANPLUS with the simple install() function, but that is bad.

Example script:

use Blah; use Acme::Time::Baby; print babytime(), "\n";

Example output:

3;0 root@ouranos:/home/juerd/modtest# perl test.pl Checking if your kit is complete... Looks good Writing Makefile for Acme::Time::Baby PERL_DL_NONLAZY=1 /usr/bin/perl -Iblib/arch -Iblib/lib -I/usr/lib/perl +/5.6.1 -I/ usr/share/perl/5.6.1 -e 'use Test::Harness qw(&runtests $verbose); $ve +rbose=(eva l(chr(36).q(|=1))-1); runtests @ARGV;' t/*.t t/00_en..........ok t/01_du..........ok t/02_custom......ok t/03_noimport....ok t/04_chef........ok t/05_warez.......ok t/06_de..........ok t/07_fr..........ok t/08_no..........ok t/09_it..........ok All tests successful. Files=10, Tests=12972, 6 wallclock secs ( 2.33 cusr + 0.17 csys = 2 +.50 CPU) Installing of Acme::Time::Baby succesfull The big hand is on the eight and the little hand is on the ten 3;0 root@ouranos:/home/juerd/modtest# perl test.pl The big hand is on the nine and the little hand is on the ten

- Yes, I reinvent wheels.
- Spam: Visit eurotraQ.

Replies are listed 'Best First'.
Re: Automatic module installation
by Corion (Patriarch) on May 23, 2002 at 09:11 UTC

    Abigail once did something similar in Re: The Future - Managing Modules with The::Net, except that Abigail didn't use CPANPLUS and that the module is not available on CPAN for reasons unknown to me. So a possible name for your module might either be The::Net indeed, as The::Net might be unclaimed at the moment (ask Abigail about this :-) ) or The::Net::CPANPLUS, as that is what you do.

    perl -MHTTP::Daemon -MHTTP::Response -MLWP::Simple -e ' ; # The $d = new HTTP::Daemon and fork and getprint $d->url and exit;#spider ($c = $d->accept())->get_request(); $c->send_response( new #in the HTTP::Response(200,$_,$_,qq(Just another Perl hacker\n))); ' # web

      Abigail once did something similar in Re: The Future - Managing Modules

      I knew that already. That node helped me to understand subrefs in @INC.

      And no, this isn't ever going into CPAN. I'm not even going to use it. Just wanted it to be possible :)

      - Yes, I reinvent wheels.
      - Spam: Visit eurotraQ.
      

      Not available on CPAN? So, what's in http://www.cpan.org/modules/by-authors/Abigail/The_Net-1.1.tgz then? You won't find it when searching because 'The' isn't a registered namespace, and the search functionality isn't checking what has really been uploaded.

      Note that The::Net doesn't install the module - it will fetch it each time.

      A reply falls below the community's threshold of quality. You may see it by logging in.

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: CUFP [id://168693]
Approved by crazyinsomniac
Front-paged by jmcnamara
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (7)
As of 2024-04-24 09:48 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found