Here is my code. For the sake of discussion, the text file being opened contains 5 questions:
#!/usr/bin/perl use CGI qw(:standard); use CGI::Carp qw(fatalsToBrowser); use strict; use warnings; use vars qw($fullname $anslength @allselections $file $fname $lname $t +ime $reviewtime $idinput $id $courselocation $useripaddress $question +no @log $clocktime $log $type $value @answers $buttonname %selections + @options); my @allquestions; my @allanswers; my @explain; print header; # ********************************* DEFINE VARIABLES $time = param('time'); $reviewtime = param('reviewtime'); $file = param('file'); $idinput = param('idinput'); $fullname = param('fullname'); $fname = param('fname'); $lname = param('lname'); $courselocation = substr($file, 0, 6); $useripaddress = $ENV{REMOTE_ADDR}; $questionno = 0; print "<HTML><HEAD>"; print "<TITLE>Exam</TITLE>"; print "</HEAD>"; print qq/<BODY BGCOLOR=beige onLoad="begintimer()">/; makeexam(); # ******************* START SUBROUTINE MAKEEXAM sub makeexam() { local $/ = "~\n"; # ** CHANGES INPUT RECORD SEPARATOR TO ~line break # ************************** THIS SECTION CREATES THE HTML FOR THE EXA +M. chop($fname); $fname = lc($fname); $lname = lc($lname); $fname = ucfirst($fname); $lname = ucfirst($lname); # ********************************** RECORD ACCESS TO THE EXAM $clocktime = localtime; @log = split(/\//, $file); @log = split(/\./, $log[1]); $log = $log[0]; $log = $log.".log"; open ACCESS, ">>$log" || die "Cannot open $log: $!"; print ACCESS $idinput . " " . $lname . " " . $fname . " " . $clocktim +e . " " . $useripaddress . " " . $time . "\n"; close(ACCESS); # ********************************** END SCRIPT TO RECORD ACCESS TO TH +E EXAM print "<H2>Hello $fullname!</H2><P>"; print start_form (-name=>'makequiz', -method=>'POST', -action=>"http:/ +/ist221.nsm.tridenttech.edu/perl/gradequiz.cgi"); chdir("/perl/web"); open FILE, "$file" || die "Cannot open $file: $!"; while (<FILE>) { # ** READS EACH LINE OF TEXT FROM FILE chomp; # ** BY DEFAULT, CHOMPS OFF $/ F +ROM EACH LINE ($type, $value) = split (/:#\s*/, $_); # ***** SPLITS EACH LIN +E BY TYPE AND CONTENT if ($type =~ m/i/i) { # ** CHECKS FOR IMAGE print "<IMG SRC=http://ist221.tridenttech.edu/images/$courselocation/$ +value>"; print "<P>"; }elsif ($type =~ m/q/i) { # ** CHECKS FOR QUESTION LINE & PRINT +S QUESTION $questionno++; print "<B>$questionno. $value</B><BR>"; push(@allquestions, $value); }elsif ($type =~ m/a/i) { # ** CHECKS FOR ANSWER LINE @answers = split (/`\s*/, $value); $anslength = @answers; # ** LENGTH OF @ANSWERS push(@allanswers, $value); }elsif ($type =~ m/s/i) { # ** CHECKS FOR SELEC +TION LINE $buttonname = $type . $questionno; push(@allselections, $value); %selections = split (/`\s*/, $value); @options = keys (%selections); if ($anslength > 1) { # ** DETERMINE +S TO USE RADIO OR CHECKBOX print "<BR>"; print checkbox_group(-name=>$buttonname, -v +alues=>\@options, -linebreak=>'true', -labels=>\%selections); }else { print "<BR>"; print radio_group(-name=>$buttonname, -values +=>\@options, -linebreak=>'true', -labels=>\%selections, -default=>'-' +); } print "<BR><HR><BR>"; }elsif ($type =~ m/e/i) {# ** CHECKS FOR EXPLAINATION +LINE push (@explain, $questionno, $value); } # END ELSIF STATEMENTS } # ** END WHILE STATEMENT close (FILE); print "<CENTER>"; # ** THIS SECTION SENDS THREE ARRAYS TO THE GRADEQUIZ.CGI print hidden(-name=>"answers", -default=>\@allanswers); print hidden(-name=>"questions", -default=>\@allquestions); print hidden(-name=>"selections", -default=>\@allselections); print hidden(-name=>"explain", -default=>\@explain); print hidden(-name=>'fname', -value=>$fname); print hidden(-name=>'lname', -value=>$lname); print hidden(-name=>'reviewtime', -value=>$reviewtime); print hidden(-name=>'file', -value=>$file); print hidden(-name=>'id', -value=>$idinput); print submit (-value=>'Grade'); print "</CENTER>"; print end_form; } print "The last element in the questions array is $#allquestions<p>"; # ************************* END SUBROUTINE MAKEEXAM print end_html;
I added the last print statement to help troubleshoot the problem. It says,

"The last element in the questions array is $#allquestions"

When I restart the web server and start fresh, the last element is 4. If I close out the quiz and then click the link to start the quiz again, the last element is -1. This continues until I restart my server again. I read about mod_perl and the arrays not re-initializing, but I can't figure out where I need to make my changes. I've tried a number of ways of initializing the variables, but can't seem to get it right. Can you shed some light on how I'm suppose to reinitialize the arrays and why perl is doing what its doing?

Also, I've noted what Ovid mentioned in my last posting about the security issue using param('file'), but I'll deal with that after I get the script running.

Many thanks.
Chris

Edit g0n - added readmore tags


In reply to Can't seem to reinitalize arrays by chriso

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.