in reply to problem changing name of uploaded file!

Answers.
  1. This is as documented. For an uploaded file both param and upload return something that can be used as a filehandle. The difference is that someone trying to be mean to you can send "/etc/passwd" as a string, if you make the mistake of trusting param*( you may wind up displaying your own password file. But upload() will not fall for this.
  2. If you take the return from param() and use it as a string you will get the name of the file on the remote system. However the file has actually been spooled to a local temp file, and you are free to open a new file named whatever you want, read from the uploaded filehandle, and print to the new file. On 5.6.0 you should be able to do it something like this (untested):
    my $in = $q->upload('uploaded_file'); my $save_as = "demo.txt"; open(my $out, "> $save_as") or die "Cannot write to '$save_as': $!"; print $out <$in>; close($out);
    Previous to 5.6.0 you couldn't use a scalar there, and would need to use Symbol and gensym a symbol for use.
Does that help?