in reply to Actually...
in thread Net::FTP and param()

Try with at temporary file:
my $C = new CGI; my $filehandle = $C->upload('file'); open OUTFILE, ">/tmp/tmpfile" or die "Can't create: $!"; while (<$filehandle>) {print OUTFILE;} close OUTFILE or die "Can't close: $!";
and then the ftp stuff with $ftp->put('/tmp/tmpfile').
This will of cause not be good enough in a multi-user environment, where you'll need to handle simultaneous uploads. You will have to create a unique temporary name, perhaps with File::MkTemp.

/brother t0mas