In general, if a filehandle isn't seekable, it's not enough to add classes to its
@ISA list. You have to find a way to avoid seeking, or else write to a temporary file and then re-open that (using, for example,
File::Temp).
Non-seekable filehandles often come from pipes or network reads. In these cases, it's simply not possible to seek forwards and backwards in the file: once the data is read, it is gone.
I'm not sure of the details of how CGI handles uploaded files, but hopefully that will get you pointed in the right direction.