in reply to CGI Error

I think if you change:
my $fh = $q->upload( $file );
to:
my $fh = $q->upload( 'file' );
You should be good ... For reference, here's a very quick and dirty (but working) simple upload form example:
#!/usr/bin/perl use strict; use warnings; use CGI qw/:standard/; use File::Basename; $|=1; print header; if( my $filename = param('uploaded_file') ){ my $fh = upload('uploaded_file'); my ($name,$path,$suffix) = fileparse( $filename ); open FILE, '>', $name; binmode FILE; while ($_ = <$fh>) { print FILE $_; } close FILE; } print start_html; print start_form( -action=>'/projects/uploads/upload.cgi', -method=>'P +OST', -enctype => 'multipart/form-data' ); print filefield('uploaded_file'); print "<br>"; print submit; print "<br>"; print '<a href=".">Directory listing</a>', "\n"; print "<br>"; print "<pre>"; print `ls -lart`; print "</pre>"; print end_form; print end_html;