The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/local/bin/perl -w

use strict 'refs';
use lib '..';
use CGI qw(:standard);
use CGI::Carp qw/fatalsToBrowser/;

print header();
print start_html("File Upload Example");
print strong("Version "), $CGI::VERSION, p;

print h1("File Upload Example"),
  'This example demonstrates how to prompt the remote user to
    select a remote file for uploading. ',
  strong(
    "This feature only works with Netscape 2.0 or greater, or IE 4.0 or greater."
  ),
  p,
  'Select the ', cite('browser'), ' button to choose a text file
    to upload.  When you press the submit button, this script
    will count the number of lines, words, and characters in
    the file.';

my @types = ('count lines', 'count words', 'count characters');

# Start a multipart form.
print start_multipart_form(),
  "Enter the file to process:",
  filefield('filename', '', 45),
  br,
  checkbox_group('count', \@types, \@types),
  p,
  reset, submit('submit', 'Process File'),
  endform;

# Process the form if there is a file name entered
if (my $file = param('filename')) {
    my %stats;
    my $tmpfile = tmpFileName($file);
    my $mimetype = uploadInfo($file)->{'Content-Type'} || '';
    print hr(), h2($file), h3($tmpfile), h4("MIME Type:", em($mimetype));

    my ($lines, $words, $characters, @words) = (0, 0, 0, 0);
    while (<$file>) {
        $lines++;
        $words += @words = split(/\s+/);
        $characters += length($_);
    }
    close $file;
    grep($stats{$_}++, param('count'));
    if (%stats) {
        print strong("Lines: "), $lines, br if $stats{'count lines'};
        print strong("Words: "), $words, br if $stats{'count words'};
        print strong("Characters: "), $characters, br
          if $stats{'count characters'};
    }
    else {
        print strong("No statistics selected.");
    }
}

# print cite("URL parameters: "),url_param();

print hr(),
  a({href => "../cgi_docs.html"}, "CGI documentation"),
  hr,
  address(a({href => '/~lstein'}, "Lincoln D. Stein")),
  br,
  'Last modified July 17, 1996',
  end_html;