in reply to Re: Unusual problem with CGI based quiz
in thread Unusual problem with CGI based quiz

Just to elaborate a little bit, if you're running this script under mod_perl or similar, every time the script is executed it just executes the code again, exactly as it was typed. In this case, because you use global variables, every time through the script you push more questions onto your array, and it never gets reset. The best way to fix this is by using my variables:
{ my @allquestions; ... push(@allquestions,"question"); ... print @allquestions; }
This will cause the variable to be newly created every time your code is called, which will make it start off empty.

In general, all of your variables in a mod_perl script should be my variables, unless you've thought about it and you really want them to retain their values between runs.

You should also consider running your code under use strict and use warnings, and you should definitely configure your mod_perl to use "taint mode", which will stop mistakes like the one Ovid pointed out from becoming crippling security holes.

Replies are listed 'Best First'.
Re^3: Unusual problem with CGI based quiz
by chriso (Sexton) on Jul 07, 2005 at 17:36 UTC
    "The best way to fix this is by using my variables:
    { my @allquestions; ... push(@allquestions,"question"); ... print @allquestions; }
    This will cause the variable to be newly created every time your code is called, which will make it start off empty."
    If I use "my" within an "if" statement, doesn't this make it impossible for me to pass that variable to another script when I use a form and pass them via a hidden variable if the hidden variables are outside the if statement?
      Yes. If you need a global variable visible to your whole program but reset on every execution, just declare a global variable and reset it on every execution:
      our $variable; $variable = undef;