Of course, you're right about this but you appear to have made a slightly wrong guess about the solution. I looked at the docco on waitpid (at the perl and c lib level) and couldn't find any specification of what waitpid returned if (a) there was a child process (b) it wasn't defunct and (c) you specified WNOHANG. Experimentally it turned out to be 0, which is kind of logical. So rather than checking against '>0', I'm checking against '== 0'
I liked your everso discreet point about the empty hashref, lightly dismissing the possibility that I might have be crass enough to think I was specifying an empty block.