in reply to Trying to write an appropriate file upload script

It looks like your main problem is in retrieving the file handle. The documentation for CGI states that the upload method takes the name of the field, not the name of the file. You should also check to make sure that it is defined after retrieving it. From the docs (I do believe that upgrading to a true IO::Handle is optional, but couldn't hurt):
$lightweight_fh = $q->upload('field_name'); # undef may be returned if it's not a valid file handle if (defined $lightweight_fh) { # Upgrade the handle to one compatible with IO::Handle: my $io_handle = $lightweight_fh->handle; open (OUTFILE,">>/usr/local/web/users/feedback"); while ($bytesread = $io_handle->read($buffer,1024)) { print OUTFILE $buffer; } }