binmode STDIN; read (STDIN, my ($cgidata), $ENV{'CONTENT_LENGTH'}) or doerror("Corrupt CGI header!"); my ($boundary) = $ENV{'CONTENT_TYPE'} =~ /boundary=(\S+)/; my (@form) = split /\x0d?\x0a?--$boundary-?-?\x0d\x0a/, $cgidata; for (@form) { if ($_ =~ /content-type:/i) { my ($details, $file) = split /\x0d\x0a\x0d\x0a/, $_, 2; $details =~ s/\x0d//gs; my ($MIME) = $details =~ /content-type: (.*)$/i; my ($name) = $details =~ /\sname="([^"]+)/i; if ($MIME =~ /jpe?g/i) { $image{$name} = $file } else { $textfile{$name} = $file } } else { my ($element, $value) = split /\x0d\x0a\x0d\x0a/, $_, 2; ($element) =~ /\sname="([^"]+)/i; $form{$1} = $value; } }