#!/usr/bin/perl use strict; use warnings; use XML::RSS; use DateTime; use DateTime::Format::Strptime; use Getopt::Long; my $LINK = 'http://example.com/'; my $FEED_TITLE = 'mangband log'; my $TAIL = 10; &main;exit; sub tail_n { my ($file, $n) = @_; open my $fh, '<', $file or die $!; my @result = <$fh>; close $fh; @result[@result-$n .. @result-1]; } sub strptime { my $src = shift; my $today = DateTime->today; my $strptime = DateTime::Format::Strptime->new( pattern => '%Y %d %b %H:%M:%S', on_error => sub { warn @_ }, ); $strptime->parse_datetime($today->year . ' ' . $src); } sub parse_log { my $line = shift; # 24 Feb 09:27:13: Welcome Tokuhirom=tokuhirom@example.com (0.0.0.0/0) if (my ($when, $what, $who) = ($line =~ /^(.+?): (Welcome|Goodbye) ([^=]+)/)) { +{ when => strptime($when), what => $what, who => $who}; } else { undef; } } sub main { my $src = shift @ARGV or die "Usage: $0 /path/to/log"; my $rss = XML::RSS->new(version => '1.0'); $rss->channel( title => $FEED_TITLE, link => $LINK, description => "mangband log by $0", ); for my $log (grep { $_ } map { parse_log $_ } tail_n $src, $TAIL) { $rss->add_item( title => "$log->{who} $log->{what}", link => $LINK, description => "$log->{who} $log->{what} at " . $log->{when}->hms, dc => { date => $log->{when}, }, ); } print $rss->as_string, "\n"; } __END__ =head1 SYNOPSIS mangbandlog2rss.pl /usr/local/mangband_0.7.2a/lib/data/mangband.log =head1 DESCRIPTION mangband's log to RSS converter. =head1 AUTHOR Tokuhiro Matsuno =head1 SEE ALSO L