in reply to bidirectional client

If you need bidirectional client it makes sense to use IO::Select. With select you can avoid forking child process. In real application it can simplify code a lot since you don't need any IPC between parent and child processes.