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;
Copyright © 1994 - 2018 Linux Journal. All rights reserved.