look for "upload_hook" in the CGI documentation, this lets you handle the upload without a temp file.
in reply to CGI upload efficiency
I looked into the hook feature, but as far as I understand it, that is only a means to monitor the upload process. I tried setting 'use_tempfile' to 0, and was successful as far as I could tell, but that just made the CGITemp file write to c:\windows\temp instead.
Then that's a bug, because the docs say:
The $use_tempfile field is a flag that lets you turn on and off CGI.pm's use of a temporary disk-based file during file
upload. If you set this to a FALSE value (default true) then param('uploaded_file') will no longer work, and the only way
to get at the uploaded data is via the hook you provide.