in reply to How to "transfer control" to child process?

Well, the first thing anyone will tell you is
use warnings; use strict;
and see if Perl itself starts telling about anything odd or finding any mistakes.

I see that you invoke the program with a line containing << !. That changes STDIN to read from something else (I'm not familiar enough with ksh to know if ! has a special meaning or is the name of a file). That stays in effect through all the programs called down through system, so the use of STDIN won't prompt the user but will keep reading from ! (whatever that is).

What is the purpose of that? I don't see your main script reading anything from STDIN itself.