use IO::Socket; my @ips = ('XXX.XXX.XXX.X0','XXX.XXX.XXX.X1','XXX.XXX.XXX.X2'); my $port = XXXX; # grab an IP randomly my $index = int(rand(scalar @ips)); my $sock; for (my $counter = 0; $counter < scalar @ips; $counter++) { # try to connect $sock = IO::Socket::INET->new( PeerAddr => $ips[$index].':'.$port, Blocking => 1, Timeout => 1, ); # success! last if ($sock); # failure - get previous IP (loops around if negative, pretty sweet) $index--; }