in reply to select open2 filehandles for reading

If you're not catching output of the program, you don't need open2, just open F, "|bc" will be enough. You also probably want your sockets and pipes to be non-blocking, so the program won't wait until all 80 bytes are entered. I understand you probably want to hack it all by yourself without extra modules (I definitely would), but if not, you might look into f.ex. IO::Events (excuse me for the shameless plug, but I myself like to hack non-blocking IO), where by a strange coincidence the example code in synopsis also wraps bc. Alternatively, IO::Select or even POE might be of interest.