#!/usr/bin/env perl use strict; use warnings; use AnyEvent; my $cv = AnyEvent->condvar; my @timers = ( AnyEvent->timer ( after => 2, interval => 5, cb => sub { warn "Timer 1 at " . AnyEvent->now . "\n"; } ), AnyEvent->timer ( after => 2, interval => 7, cb => sub { warn "Timer 2 at " . AnyEvent->now . "\n"; } ), AnyEvent->timer ( after => 20, cb => sub { warn "Timer 3 at " . AnyEvent->now . "\n"; $cv->send; } ), ); $cv->recv; #### Timer 1 at 1591953440.37264 Timer 2 at 1591953440.37264 Timer 1 at 1591953445.37213 Timer 2 at 1591953447.37533 Timer 1 at 1591953450.36854 Timer 2 at 1591953454.38475 Timer 1 at 1591953455.36656 Timer 3 at 1591953458.37977 #### #!/usr/bin/env perl use strict; use warnings; use AnyEvent; use AnyEvent::Ping; use Data::Dumper; my @todoList = map { "192.168.100." . $_ } (1 .. 5); my $cv = AnyEvent->condvar; my @timers = ( AnyEvent->timer ( after => 2, interval => 5, cb => sub { warn "Timer 1 at " . AnyEvent->now . "\n"; ping_hosts (1, @todoList); } ), AnyEvent->timer ( after => 2, interval => 7, cb => sub { warn "Timer 2 at " . AnyEvent->now . "\n"; ping_hosts (2, @todoList); } ), AnyEvent->timer ( after => 20, cb => sub { warn "Timer 3 at " . AnyEvent->now . "\n"; $cv->send; } ), ); $cv->recv; sub ping_hosts { my ($num, @hosts) = @_; my $ping_timeout = 2; #seconds to wait for response my $ping_attempts = 4; #number of pings to issue, my $ping_pktsize = 32; #packet size of ping my $ping = AnyEvent::Ping->new (packet_size => $ping_pktsize); $ping->timeout ($ping_timeout); #$cv_ping->begin(sub { shift->send($_[0]) }); foreach my $host (@hosts) { $ping->ping ( $host, $ping_attempts, sub { print "Pinger $num: $host state:" . Dumper ($_[0]) . "\n"; } ); } }