use strict;
use warnings;
use XML::Simple;
while (my $subfile = shift @ARGV)
{
my $subs = XMLin($subfile);
visitItems($subs->{'body'}, \&printSubscriptions);
}
sub visitItems
{
my ($ref, $subRef) = @_;
for my $item (@{$ref->{'outline'}})
{
&$subRef($item);
if (ref($item->{'outline'}) eq 'ARRAY')
{
visitItems($item, $subRef);
}
}
}
sub printSubscriptions
{
my ($item) = @_;
# This is a less verbose (but more confusing?) way to do the next 5 declarations.
# my ($html, $title, $rss, $type, $description) =
# map { $item->{$_} } (qw(htmlUrl title xmlUrl type description));
my $html = $item->{'htmlUrl'};
my $title = $item->{'title'};
my $rss = $item->{'xmlUrl'};
my $type = $item->{'type'};
my $description = $item->{'description'};
print qq{<p>};
print qq{<a href="$html">} if ($html);
print (($title) ? $title : $html || $rss);
print qq{</a> } if ($html);
print qq{ <em>$description</em>} if ($description);
print qq{ <a href="$rss"><img
src="http://corky.net/dotan/log/images/xml.gif"
width="36" height="14"
alt="RSS"></a>} if $rss;
print qq{</p>\n };
}