# block after we've forked everything, only if we're still waiting on select .. while ( $s->count() > 0 ) { while (my @ready = $s->can_read()) { foreach my $fh ( @ready ) { my $buff; my $res = sysread($fh, $buff, 1024); if ($res > 0) { my $host = $results{$fh}; $results{$host} .= $buff; } elsif (defined $res) { if ( $res == 0) { delete $results{$fh}; $s->remove($fh); } } else { # $res is undef, so tell our user about the error print "Something broke! : $!\n"; } } } }