in reply to Re^2: Calling strace -f
in thread Diagnosing blocking io (or: finding the WHY of my Open2 woes).

if I don't close $JSWRITE in a timely manner, the interpreter won't know to flush its read buffer and continue, but if I do close $JSWRITE, there's nothing for the readline() loop to read from anymore.

I think you nailed it.