http://www.perlmonks.org?node_id=939496

Anonymous Monk has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I'm trying to upload a file, and then process the contents of the file. Mostly this works fine, but in some cases, the results on the page are incorrect. It prints the processed filename correctly, but the processed contents are the contents from a previously uploaded file.

Any ideas where it goes wrong ?

Thanks! Rianne
use CGI qw/:standard -private_tempfiles/; use Text::CSV; use Fcntl qw( :DEFAULT :flock ); use constant UPLOAD_DIR => "/tmp"; use constant BUFFER_SIZE => 16_384; use constant MAX_FILE_SIZE => 50*1_048_576; # Limit each upload + to 50 MB use constant MAX_DIR_SIZE => 100 * 1_048_576; # Limit total uploads +to 100 MB use constant MAX_OPEN_TRIES => 100; $CGI::DISABLE_UPLOADS = 0; $CGI::POST_MAX = MAX_FILE_SIZE; my $q = new CGI; $q->cgi_error and error( $q, "Error transferring file: " . $q->cgi_err +or ); #Some other stuff here print $q->header( "text/html", -expires => "-1s" ), + $q->start_html( -title => "Wordcloud Generator", -bgcolor => "#f +fffff", -head=>$q->meta({-http_equiv => 'Pragma', -content => 'no-cache'}) +), $q->h2( "Wordcloud Generator" ), $q->hr, $q->p("Processed file:", $file); my $in = $q->upload( "file" ); my $csv = Text::CSV->new ({ binary => 1, eol => $/, sep_char => "\t" } +); my $header = "1"; my $numcolumns; while(my $line = <$in>) { if($csv->parse($line)) { my @row = $csv->fields(); #processing the file