#!/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";
}
);
}
}