ok u rigth.. why parse the output ?? use pure Perl!
here the new version
some idea to play sound in other system? like
if $^O ne 'MSWin32' ...
#!perl
use strict;
use warnings;
$|++;
use Getopt::Long;
use Net::Ping;
use Win32::Sound;
my $sleep = 60;
my $conteggio = 4;
my $echook = ( $conteggio - 1 );
my $alarmnum = 3;
my $sound;
my $volume = 100;
my $timeout = 2;
my $host;
&aiuto() if ( !GetOptions('ip=s' => \$host,
'sleep=i' => \$sleep,
'conteggio=i'=>\$conteggio,
'ok=i' => \$echook,
'timeout=i' => \$timeout,
'alarm=i' => \$alarmnum,
'play=s' => \$sound,
'volume=i' => \$volume,
) or ! $host );
$timeout = 2 if $timeout < 1;
$alarmnum = 3 if $alarmnum < 1;
if ( $echook > $conteggio ){ $echook = $conteggio-1 }
if (defined $sound && !(-e $sound)) {$sound = 'crow.wav'}
######################################################################
+##########
while (1){
sleep $sleep;
my $ok = &controlla($host);
if ($ok < $echook){
for (1..$alarmnum) { &suona() }
print " ERROR !\n";
}
else {print " OK $host\n";}
}
######################################################################
+##########
sub controlla{
my $host = shift;
my $p = Net::Ping->new("icmp");
my $ok = 0;
foreach my $try (1..$conteggio)
{
print ($p->ping($host, $timeout) ? (++$ok and '.') : 'X' );
sleep(1);
}
$p->close();
return $ok;
}
######################################################################
+##########
sub suona {
if (defined $sound && -e $sound) {
Win32::Sound::Volume($volume,$volume);
Win32::Sound::Play($sound);
}
else {sleep 1; print"\a\a"}
}
######################################################################
+##########
sub aiuto {
print <<EOA;
UTILIZZO DI $0:
$0 -i 10.0.0.1 [-sleep n] [-conteggio n] [-ok n] [-timeot n] [-alar
+m n] [-play file.wav] [-volume %]
-i 10.0.0.1
ping specified IP every 60 seconds 4 times expecting 3 positives repl
+y or play 3 system bell during 3 seconds
--ip=10.10.0.1 --sleep = 30 --conteggio = 10 --ok = 5 --alarm = 20
-i 10.10.0.1 -s 30 -c 10 -o 5 -a 20
same of above
EOA
exit 1;
}