LJ Archive

Listing 1. Object QuizQuestions

#!/usr/bin/perl -w

package QuizQuestions;

use strict;
use diagnostics;

# Get the CGI-enhanced version of the Carp
# debugging module, available
# from CPAN, at http://www.perl.com/CPAN
use CGI::Carp;

# All of the questions should be in the
# same directory
my $questionDir = "/home/reuven/Text/Linux-Journal/";

# ----------------------------------
sub new
{
    # Get our arguments
    my $type = shift;
    my ($quizName) = @_;
    my $self = {};

    # Set some initial variables
    my @questions = ();
    my $counter = 0;

    # Open the questions file
    open (QUESTIONS, $questionDir . $quizName) ||
       die "Could not open $quizName ";

    # Loop through the question file
    while (<QUESTIONS>)
    {
       next if /^#/;      # Ignore comment lines
       next unless /\w/;  # Ignore whitespace
                          # lines

       chomp;

       # Add this question to our list
       $questions[$counter++] = $_;
    }

    close(QUESTIONS);

    # Now turn @questions into an
    # instance variable
    $self->{"questions"} = \@questions;

    bless $self;
}

# ----------------------------------------
sub getQuestion
{
    # Get information about ourself
    my $self = shift;

    # Get the argument, which should be an integer
    my($index) = shift;

    # Get the question corresponding to
    # that number
    my $question =
      @{$self->{"questions"}}[$index];

    # Turn that into a list
    my @question = split(/\t/, $question);

    # Add the number of the question to the list
    push(@question, $index);

    # Return the list to the caller
    return @question;
}

# --------------------------------
sub getRandomQuestion
{
    # Get information about ourself
    my $self = shift;

    my @questions = @{$self->{"questions"}};

    # Seed the random number generator
    srand(time);

    # Choose a random number from among
    # the questions


    my $random_number = int(rand($#questions+1))+0;

    # Now invoke getQuestion with our
    # random number
    return ($self->getQuestion($random_number));
}

# Indicate that the module was loaded successfully
1;
LJ Archive