Dunno how you would modify the 'webform' script to do this, but to give you an example, I took a CGI perl script from the mod_perl test section that does file uploads and modified it (heavily) to allow binary files (and handle windows pathnames as well), it is as follows (and stores the files in the ./files directory of where this script sits). It's ugly, but works! Hope it helps:
use strict;
use CGI qw

standard);
use CGI::Carp qw/fatalsToBrowser/;
use Apache;
use File::Basename;
$|=1;
my $r = Apache->request();
print header();
print start_html("Upload Files"

,
h1("Upload Files"

,
start_multipart_form(),
"Enter the file to process:",
filefield('filename','',45),
br,
reset,submit('submit','Process File'),
endform;
if (my $file = param('filename')) {
my $filename="";
if ($file =~ /.*\/.*/)
{
$filename = dirname($r->filename) . "/files/$file";
print "$filename<br>";
}
elsif ($file =~ /.*\\.*/)
{
my @stuff=split /\\/, $file;
chomp @stuff;
$filename= dirname($r->filename) . "/files/$stuff[(scalar @stuff) - 1]";
print "$filename<br>";
}
else
{
$filename = dirname($r->filename) . "/files/$file";
}
open (OUTFILE, ">$filename"

|| die "$0: Could not open $filename: $!\n File to upload was $file\n";
my $bytes=undef;
my $buffer=undef;
while ($bytes=read($file,$buffer,1024))
{
print OUTFILE $buffer;
}
close OUTFILE;
print hr,h1,basename($filename)," uploaded";
}
print end_html;
---
Batavus