http://www.perlmonks.org?node_id=83740
Category: CGI
Author/Contact Info Ben Jacobs (dooberwah@crosswinds.net)
Description: This is a quiz game that I wrote to run on my website. It was designed to help you test your language skills when learning another language (the current words are in English and Esperanto). The script asks you a question and you have to type in the answer in a text box and submit it. Hope you enjoy, and comments are very welcome.
#!/usr/bin/perl

use strict;
use warnings;
use CGI qw/:standard/;

my @words = ( 'amiko::friend',
          'kafo::coffee',
          'filo::son',
          'kuko::cake',
          'frato::brother',
          'lakto::milk',
          'instruisto::teacher',
          'pano::bread',
          'knabo::boy',
          'sukero::sugar',
          'patro::father',
          'teo::tea',
          'akvo::water',
          'butiko::shop',
          'limonado::lemonade',
          'papero::paper',
          'plumo::pen',
          'taso::cup',
          );

srand ( time() ^ ($$ + ($$ << 15)) );

my $answer = param('answer');
($answer) = ( $answer =~ /^(\w*)$/ );

my $language = param('language');
$language = 'Esperanto' unless $language;

my $last_question = param('last_question');
($last_question) = ($last_question =~ /^(\w*)$/);

my ($esperanto, $english) = split /::/, @words[rand(scalar(@words))];
my $question = sprintf("%s\n", $language eq 'Esperanto' ? $esperanto :
+ $english);

my $match = gradeit( $last_question, $answer );

sub gradeit {
    my $first = shift;
    my $second = shift;
    
    my $together;
    if ($language eq 'Esperanto') {
    $together = join "::", $first, $second;
    } else {
    $together = join "::", $second, $first;
    }

    my $match = "No. $first != $second";
    foreach my $word (@words) {
    if ($word eq $together) {
        $match = "Correct. $first = $second";
        last;
    }
    }

    return $match;
}

param('last_question', $question);
print header,
    start_html( -title => 'Esperanto Quiz' ),
    h1('Esperanto Quiz'),
    p( b( 'Question: '),
       'What does ', 
       b($question),
       ' mean?' ),
    p( $match ),
    start_form,
    textfield( -name => 'answer',
           -size => 40,
           -maxlength => 40 ),
    br, 
    radio_group( -name => 'language',
         -values => ['English', 'Esperanto'],
         -default => 'Esperanto', 
         -linebreak => 'true'), 
    hidden( 'last_question' ),
    submit,
    end_form,
    end_html;