Section 10.8. Installed Perl Modules


10.8. Installed Perl Modules

Another interesting way to use a Feed is to keep track of changing system configurations. The following is a simple example. I have two machines running my scripts; one is my laptop and the other a server in a rack somewhere in North America. I write mostly in Perl and use a lot of modules. It's useful to me to keep track of what's installed, and what's not, on each; this script produces a feed of the modules I have installed.

10.8.1. Walking Through the Code

We'll use the usual modules plus one more, ExtUtils::Installed. Written by Alan Burlison, this module really does all the work here. Again, this is somewhat the point of this chapter. Feeds aren't difficult things, and they are incredibly useful interfaces to list-like data.

use warnings; use strict; use CGI qw(:standard); use XML::RSS; use ExtUtils::Installed;

ExtUtils::Installed creates an array of all the installed modules; run the shell command uname -n to find the name of the machine we're running the script on:

my $installed    = ExtUtils::Installed->new( ); my $machine_name = `uname -n`;

Now, set up the feed as usual, using the machine name to label it:

my $rss = new XML::RSS( version => '2.0' ); $rss->channel(     title       => "Perl Modules on $machine_name",     link        => "http://www.benhammersley.com/tools/",     description => "A list of installed Perl modules on $machine_name" );

Finally, go through the array, pulling out the name and version number of each module and creating the items. Then serve it up. Simple.

foreach my $module ( $installed->modules( ) ) {     my $version = $installed->version($module) || "???";     $rss->add_item(         title       => "$module $version",         description => "$module $version",         link        => "http://search.cpan.org/search%3fmodule=$module",     ); } print header('application/rss+xml'); print $rss->as_string;

10.8.2. The Entire Listing

#!/usr/bin/perl use warnings; use strict; use CGI qw(:standard); use XML::RSS; use ExtUtils::Installed; my $installed    = ExtUtils::Installed->new( ); my $machine_name = `uname -n`; my $rss = new XML::RSS( version => '2.0' ); $rss->channel(     title       => "Perl Modules on $machine_name",     link        => "http://www.benhammersley.com/tools/",     description => "A list of installed Perl modules on $machine_name" ); foreach my $module ( $installed->modules( ) ) {     my $version = $installed->version($module) || "???";     $rss->add_item(         title       => "$module $version",         description => "$module $version",         link        => "http://search.cpan.org/search%3fmodule=$module",     ); } print header('application/rss+xml'); print $rss->as_string;



    Developing Feeds with RSS and Atom
    Developing Feeds with Rss and Atom
    ISBN: 0596008813
    EAN: 2147483647
    Year: 2003
    Pages: 118

    flylib.com © 2008-2017.
    If you may any questions please contact us: flylib@qtcs.net