$ftp->message();
returns the responses from the other end (as an array of \n terminated lines) after each command, and $ftp->code returns the message number.
    Does Net::FTP open up a seperate shell and run the ftp session through this?
No.  Only thing I can think, you could $|++ to autoflush STDOUT.  But it really must be somewhere else, ie., in the calling program.