in reply to IO::Select - is it right for this?

Yes, IO::Select is right for this.

IO::Select will work fine for filehandles other than sockets. You just need to give the fileno of the handle as argument to the IO::Select instance's add() method, or else wrap the pipe's output handle in IO::Handle and use that object as the argument.

After Compline,
Zaxo