|There's more than one way to do things
Well, the first thing anyone will tell you is
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.