# code 1 use CGI; my $q = new CGI; my $file = $q->param("upfile"); # $file set to 'C:\images\apple.gif'; # $img_str set to 'apple.gif' my ($img_str) = ($file =~ /.*\\(.*\.(gif|jpg))/); open(OUT,">C:/tmp/$img_str") or die; binmode $file; binmode OUT; my $buffer = ''; while (read($file, $buffer, 1024)) { print OUT $buffer; } close(OUT); # end of use CGI # code 2 use CGI qw(:standard); my $file = param('upfile'); # $file set to 'C:\\images\\apple.gif'; my ($img_str) = ($file =~ /.*\\(.*\.(gif|jpg))/); open(OUT,">C:/tmp/$img_str"); binmode $file; # This line is not present in code 1 with use CGI open(FH,"$file"); binmode FH; binmode OUT; my $buffer = ''; while (read(FH, $buffer, 1024)) { print OUT $buffer; } close(OUT); #### # code 2 use CGI qw(:standard); use File::Basename; my $file = $q->param('upfile') || ''; my $img_str = basename($file); open(OUT,">C:/tmp/$img_str"); binmode $file; binmode OUT; my $buffer = ''; while (read($file, $buffer, 1024)) { print OUT $buffer; } close(OUT);