Scripts archive: ping <host> command

#
# ping.pl
#

OerPerl::add_command_handler("ping", "my_commandhandler");

sub my_commandhandler
{
    my($command, $target, $nick, $userhost, $args) = @_;
    my $tochan = OerPerl::is_valid_channel($target) ? 1 : 0;
    my $target_type = $tochan ? OerPerl::CHANNEL : OerPerl::USER;
    my($pingoutput, $ms, $loss);

    $pingoutput = `ping -c1 -w1 -W1 $args 2>&1`;
    if(defined $pingoutput) {
        $_ = $pingoutput;
        chomp;
        if(/unknown\shost/) {
            OerPerl::sendto($tochan ? $target : $nick, $target_type,
                "unknown host $args");
        } else {
            if(/time=([0-9]{1,5}\.[0-9]{1,5})\sms/) {
                $ms = $1;
            } elsif(/time\s([0-9]{1,3})ms/) {
                $ms = $1;
            }
            $loss = $1 if(/([0-9]{1,3})%\spacket\sloss/);
            OerPerl::sendto($tochan ? $target : $nick, $target_type,
                "ping reply from ${args}: ${ms}ms (${loss}% packet loss)");
        }
    }
}