########################################### package PoCoRunner; # Mike Schilli, 2007 (m@perlmeister.com) ########################################### use strict; use warnings; use POE::Wheel::Run; use POE; our $PKG = __PACKAGE__; ########################################### sub new { ########################################### my($class, %options) = @_; my $self = { %options }; POE::Session->create( package_states => [ $PKG => [ qw(_start stdout finish run) ] ], heap => { self => $self }, ); bless $self, $class; } ########################################### sub _start { ########################################## my ($kernel, $session) = @_[KERNEL, SESSION]; $kernel->post($session, "run"); } ########################################### sub run { ########################################### my ($kernel, $heap, $session) = @_[KERNEL, HEAP, SESSION]; my $wheel = POE::Wheel::Run->new( Program => $heap->{self}->{command}, ProgramArgs => [$heap->{self}->{args}], StdoutEvent => "stdout", ErrorEvent => "finish", CloseEvent => "finish", ); $heap->{"wheel"} = $wheel; $heap->{"stdout"} = ""; } ########################################### sub stdout { ########################################### my ($input, $heap) = @_[ARG0, HEAP]; $heap->{stdout} .= "$input\n"; } ########################################### sub finish { ########################################### my ($kernel, $heap) = @_[KERNEL, HEAP]; ${ $heap->{self}->{data} } = $heap->{stdout}; $kernel->delay("run", $heap->{self}->{interval}); } 1;