in reply to Re: File upload became deaf after upgrading from 5.8.7 to 5.8.9
in thread File upload became deaf after upgrading from 5.8.7 to 5.8.9

Hey bart, hey aquarium

Thanks for the replies!

I've just found the cure.

Before that part of the code, I had a sub that initiated the CGI object within itself. For example:

#!/usr/bin/perl -wT use CGI; my $q = new CGI; #... my ( $user_id, $name ) = identify ( $auth_token ); # ... my $fh = $q->upload( "file" ); my $filesize = -s $fh; die $filesize; # undef at debugging! # ... file read routines, that resulted blank after the upgrade
Then, on my personal lib, mylib1.pm, I had this subroutine:
sub identify { my $token = shift; # my $q = new CGI; # it started working when I removed this line! # identification routines # some calls to CGI.pm methods, where I used $q }
After hours of mystery, I decided to remove this inner initialization. And it worked! I'm now passing $q as a parameter to the sub.

sub identify { my $token = shift; my $q = shift; # and including this element on the sub call, of cou +rse my $q = new CGI; # it started working when I removed this line! # identification routines # some calls to CGI.pm methods, where I used $q }
Tell me, guys, what's the explanation? Is this a bug on CGI.pm garbage collection or is it the case that I was doing ugly things.

Funny is that it worked with 5.8.7.

Thanks

Andre

Replies are listed 'Best First'.
Re^3: File upload became deaf after upgrading from 5.8.7 to 5.8.9
by bart (Canon) on Nov 05, 2010 at 00:02 UTC
    Uh, creating a CGI object effectively reads the data from the input. After that, it is gone, when the data is POSTed (as is necessary for file upload) — you may repeat reading parameters from GET.

    It's not a matter of garbage collecting, it's a matter of a physical action performed when creating the object. An action that cannot stand being repeated.

      That's very clarifying, thanks a lot Bart!

      But it is incredible as it worked for years with 5.8.7.
      Probably something they were being tolerant with bad code.
      I'll watch out for this from now on.

      Thanks!

      André

        That's very clarifying, thanks a lot Bart! But it is incredible as it worked for years with 5.8.7. Probably something they were being tolerant with bad code. I'll watch out for this from now on. Thanks!

        Seeing how CGI.pm has always done this, that is unlikely