in reply to Parallel::ForkManager Problem

I'd do it with threads this way. (I've used ping cos I don't have nmap but that's a one line change).

#! perl -slw use strict; use threads qw[ yield ]; use Thread::Queue; if( !@ARGV or $ARGV[ 0 ] !~ m[\d{1,3}\.\d{1,3}\.\d{1,3}] ) { die "Usage: $0 xxx.xxx.xxx\nEnter 3 octets only\n"; } my $dom = $ARGV[ 0 ]; my $Qwork = new Thread::Queue; my $Qresults = new Thread::Queue; sub work{ yield until $Qwork->pending; while( $Qwork->pending ) { my $sub = $Qwork->dequeue; system "ping -n 1 -l 0 $dom.$sub 2>&1 1>nul"; $Qresults->enqueue( sprintf "$dom.$sub %s alive", $? >> 8 ? 'is not' : 'is' ); } return; } threads->new( \&work )->detach for 1 .. 20; $Qwork->enqueue( 1..255 ); yield until $Qresults->pending == 255; print $Qresults->dequeue while $Qresults->pending;

Examine what is said, not who speaks.
"Efficiency is intelligent laziness." -David Dunham
"Think for yourself!" - Abigail

Replies are listed 'Best First'.
Re^2: Parallel::ForkManager Problem (threads instead?)
by Anonymous Monk on Jun 11, 2004 at 07:42 UTC
    HI Thanks the code works fine. Thanks for givin me threads solution, i wanted to use threads only, but i didnt knew abt this module.