http://www.perlmonks.org?node_id=312764

Here is a quick and dirty little app that will query http://perladvent.org for the module of the day and install it via CPAN. You must have the proper permissions on your system to actually install the module. Better late then never. :)
use strict; use warnings; use CPAN; use Time::Piece; use LWP::Simple; use Data::Dumper; use HTML::TokeParser::Simple; use Lingua::EN::Numbers::Ordinate; use constant YEAR => 2003; my $time = localtime; unless ($time->year == YEAR && $time->mon == 12 && $time->mday < 25) { die "today does not have module\n"; } my $day = ordinate($time->mday); my $html = get("http://perladvent.org/@{[YEAR]}/$day"); my $p = HTML::TokeParser::Simple->new(\$html); while (my $t = $p->get_token) { if ($t->is_start_tag('div')) { my $attr = $t->return_attr; if (defined $attr->{class} && $attr->{class} eq 'moduletitle') { $t = $p->get_token; CPAN::Shell->install($t->as_is); } } }

UPDATE:
Podmaster++ >:)

jeffa

L-LL-L--L-LL-L--L-LL-L--
-R--R-RR-R--R-RR-R--R-RR
B--B--B--B--B--B--B--B--
H---H---H---H---H---H---
(the triplet paradiddle with high-hat)

Replies are listed 'Best First'.
Re: Perl Advent Calendar Daily Installer
by PodMaster (Abbot) on Dec 07, 2003 at 17:29 UTC
    This is a tad friendlier to the server
    use strict; use warnings; use LWP::Simple 'get'; use XML::Simple; use CPAN; my $xml = XMLin( get( 'http://perladvent.org/perladvent.rdf' ) ); my $item = shift @{ $xml->{channel}{item} }; CPAN::Shell->install($1) if $item->{title} =~ /-\s(\S+)$/;
    update: and here is the friendliest version possible
    use strict; use warnings; use LWP::Simple 'get'; use XML::Simple; use CPAN; CPAN::Shell->install( XMLin( get( 'http://perladvent.org/perladventone.rdf' ) ) ->{channel}{item}{title} );

    MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
    I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
    ** The third rule of perl club is a statement of fact: pod is sexy.

      And for those of us who like to avoid the expat-based modules and prefer libxml2:
      use strict; use warnings; use LWP::Simple 'get'; use XML::LibXML; use CPAN; CPAN::Shell->install( XML::LibXML ->new() ->parse_string( get( 'http://perladvent.org/perladventone.rdf' + ) ) ->findvalue( '/rss/channel/item/title' ) );
      Actually for the RDF feed currently provided you can just use //title as the XPath expression.

      Makeshifts last the longest.