#!/usr/bin/perl use strict; use warnings; use Async::Event::Interval; use Log::Log4perl qw(:easy); Log::Log4perl->easy_init( { level => $INFO, file => 'test.log' } ); my $logger = Log::Log4perl->get_logger(); my $count = 1; my $event = Async::Event::Interval->new(1.5, \&callback); $event->start; for (1..10){ print "$_: in main loop\n"; $event->stop if $_ == 3; $event->start if $_ == 7; if ($event->status){ print "event is running\n"; $logger->info('logging in main'); } if ($event->status == -1){ print "event has crashed... restarting it\n"; $event->restart; } sleep 1; } sub callback { print "timed event callback\n"; $logger->info("running poll $count") ; $count++; } __END__ $ perl test.pl 1: in main loop event is running timed event callback timed event callback 2: in main loop event is running 3: in main loop timed event callback 4: in main loop 5: in main loop 6: in main loop 7: in main loop event is running timed event callback 8: in main loop event is running timed event callback 9: in main loop timed event callback event is running 10: in main loop timed event callback event is running timed event callback $ cat test.log 2018/01/23 17:34:15 logging in main 2018/01/23 17:34:15 running poll 1 2018/01/23 17:34:16 logging in main 2018/01/23 17:34:16 running poll 2 2018/01/23 17:34:22 logging in main 2018/01/23 17:34:22 running poll 1 2018/01/23 17:34:23 logging in main 2018/01/23 17:34:23 running poll 2 2018/01/23 17:34:24 running poll 3 2018/01/23 17:34:24 logging in main 2018/01/23 17:34:25 logging in main 2018/01/23 17:34:25 running poll 4