in reply to why do CGI's mess everything up???

Just a guess, but are you using this script on a Windows box? Some browsers insert "\r" as the newline for uploaded data and this subsequently messes up homegrown parsing routines. The way I've gotten around this is to filter for "\r" when saving the data. Here's a sub from a script I'm working on. I'm still working out the taint checking and have a ways to go, but perhaps this will help you out despite still being in its infancy:
sub write_file() { my $filehandle = shift; my $type = uploadInfo($filehandle)->{'Content-Type'}; die "text files only at this point" unless ($type eq 'text/plain' or +$type eq 'text/html'); print "file: $filehandle of type $type\n\n <PRE>"; open (FH, ">d:/inetpub/wwwroot/repnet/docs/$filehandle") or die "cannot create file: $!"; while (<$filehandle>) { $_ =~ s/\r//g; print; print FH; } print "</PRE>"; close(FH); }
---- I am what I read