It looks like that leaves it blocking (and continuing to read) on the first filehandle it processes. I don't see it ever move on through the loop.
From previous researching on this, it seems that there's no real equivalent to EOF for this type of communication without closing the file descriptor.
Pulling all available data without blocking would be ideal, but my bigger problem is just getting to the next file handle from the group returned by IO::Select without waiting for a child to die first. I can't understand why it's trying to close and wait on the child PID. Even if I comment out the close bit (which isn't reached anyway), I still get the same result with the close on the FD and wait on the child PID.