Uploading a file to your server with a CGI script is dead easy with perl. That's beacuse the CGI module conviently passes file input types as both a file name and a file handle. This means you can read the contents of the file like you'd read any other file handle.

So, if the HTML form looks like this (note the enctype='multipart/form-data', it's what allows your browser to send an entire file):

<form action='cgi.pl' method='post' enctype='multipart/form-data'>
    <input type='file' name='filename'>                           
</form>        

Then you can read and save the file passed with:

#!/usr/bin/perl -w

use strict;
use CGI;  
use FileHandle;

my $cgi = CGI->new();
my $filename = $cgi->param( 'filename' );
                        
my $fh = FileHandle->new( ">/tmp/temporary.file" ) || die "$!";

while (<$filename>) { 
    print $fh;
}   

If you're on Windows NT or something, you might need to set the filehandle to binmode.