Pipes aren't quite flexible enough to do that sort of two-way communication with the spawned process. There are two ways that I know of offhand that will work: one is IPC::Open3 and the other is Expect.pm.
Open3 is conceptually like having pipes to both input and output (and stderr). Expect is closer in spirit to logging in as an interactive user; it gives you the ability to script a two-way conversation with the spawned process. Either one is going to take quite a bit of reading and trying test cases to digest and understand.