Since I'm now only reading from $PROG_STDERR when there's data to be read (!eof), reading nothing does indicate an error, right?
It then stands to reason that the error will be stored in $! since the failure happened during the readline, right?
If I read between the lines, I think you're saying that by not checking eof after the read, I don't know whether I read all of the data. What conditions would cause me to be able to read some data and then fail midway through? Is that a likely scenario?