package Foo; use Moose; use MooseX::JobControl; use MooseX::JobControl::Engine::POEScheduled; use MooseX::Workers::ScheduledJob::Code; has controller => ( isa => 'MooseX::JobControl', is => 'ro', default => sub { MooseX::JobControl->new( engine => MooseX::JobControl::Engine::POEScheduled->new( observers => [], ), ); }, handles => [qw(job_queue)], ); sub run { my ($self) = @_; $self->controller->add_job( MooseX::Workers::ScheduledJob::Code->new( command => sub { print( join ',', (scalar localtime, @_, "\n") ); }, %$_ ) ) for ( { args => ["one"], freq => "secondly" }, { args => ["two"], freq => "secondly", interval => 2, }, { args => ["five"], freq => "secondly", interval => 5, }, ); $self->controller->run; } __PACKAGE__->new->run