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.
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 item
s. 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;
#!/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;
3.15.168.2