Quick tip for anyone using CGI.pm to handle file uploads: with the new
version of CGI, you need to make sure you're not creating multiple CGI
objects (i.e. doing my $query=new CGI;
more than once), or
if you are, make sure the first one that gets created doesn't get
destroyed until after you're done handling your file uploads. This is
because when the CGI object gets destroyed (e.g. at the end of the block
if it's local, or the end of your script if it's global), it deletes the
temporary file used for the upload, and new CGI objects won't have access
to the file anymore. When you try to call $query->upload('whatever')
you'll get undef
.
So, if you're moving a script from an old server to a new server, and
you have CGI objects being created in multiple places (perhaps in multiple
modules), you need to use a global like our $query=new CGI;
for
the first time a CGI object is created, and then either change all the others
to just use the global $query
instead of creating new local
objects, or if you're lazy, leave them as-is (they should still work as long
as they original doesn't get destroyed until after you're done).
It looks like this change was made as a workaround for the Win32 platform. Previously, temp files would be unlinked as soon as they were opened, so that as soon as they were closed they would be automatically deleted; on Win32 you can't unlink an open file, so they can't be unlinked until you're done with them.