#!/usr/bin/perl

use threads;
use Net::Ping;

$subnet='192.168.2.';
@hosts=(1..254);

sub subnetting {
  my $ip00 = shift @_;
  my @ip01 = @_;
  my @ipaddr;

  for (my $k=0; $k<=$#ip01; $k++) {
    $ipaddr[$k]=$ip00.$ip01[$k];
  }
  return @ipaddr;
}

sub startping {
  my $host = $_;
  my $p = Net::Ping->new("tcp",1,1);
    if ($p->ping($host)) {
      print "$host\n";
    }
  $p->close();
}

sub startthreads {
  foreach (@ipaddr) {
    sleep(0);
    push(@pinged_addr, threads->create("startping", $_));
  }

  foreach (@pinged_addr) {
    $_->join();
  }
}

@ipaddr = subnetting($subnet, @hosts);
startthreads(@ipaddr);
