The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
use strict;
use POE qw(Wheel::FollowTail Filter::Stackable Filter::Line Filter::IASLog);
use Data::Dumper;

$|=1;

die "You must provide a file to monitor\n" unless scalar @ARGV;

my $filename = shift @ARGV;

POE::Session->create(
  package_states => [
	'main' => [qw(_start _input _error)],
  ],
  args => [ $filename ],
);

$poe_kernel->run();
exit 0;

sub _start {
  my ($kernel,$heap,$file) = @_[KERNEL,HEAP,ARG0];
  my $filter = POE::Filter::Stackable->new(
	Filters => [ POE::Filter::Line->new(), POE::Filter::IASLog->new() ],
  );
  $heap->{wheel} = POE::Wheel::FollowTail->new(
	Filename     => $file,
	Filter       => $filter,
	PollInterval => 1,
	InputEvent   => '_input',
	ErrorEvent   => '_error',
  );
  return;
}

sub _input {
  print Dumper( $_[ARG0] );
  return;
}

sub _error {
  my ($operation, $errnum, $errstr, $wheel_id) = @_[ARG0..ARG3];
  warn "Wheel $wheel_id generated $operation error $errnum: $errstr\n";
  return;
}