while ( $s->count() > 0 ) { while (my @ready = $s->can_read()) { foreach my $fh ( @ready ) { my $buff; my $res = sysread($fh, $buff, 1024); unless (defined $res) { # error handler print "Something broke! : $!\n"; $s->remove($fh); close $fh; next; } if ( $res == 0) { $s->remove($fh); # print "Closing $fh\n"; close $fh; next; } $results{$fh}{buffer} .= $buff; } } }