As requested, I ran perltidy on my script to see if I could make it easier for somebody else to read. Perhaps a little explanation of how it works would also be helpful:
Tutorial.cgi is triggered by a user who wishes to enlarge his/her vocabulary of technical terms in a certain field. The user sees an .html file that gives him a way to select any of several categories for review, or to select a review that includes all categories at once. The SEND button addresses the script with a line including CATEGORY=, which signals that this is a new tutorial so the script doesn't look for cookies. The script reads a database containing hundreds of terms with their associated categories, definitions, and vignettes. Using this info, the script composes a simple multiple choice question, composes a web page on the fly, and sends this back to the user. It also sets several cookies containing the state of the tutorial. It should then run out of instructions and die. The user clicks on a button ("A" or "B"), which fires back a string that reawakens the script and shows it what answer the user chose. The script inspects the cooky-jar to determine the state of the script, compares the user's selection with its expectation, and fires back one of two new web pages. If the user chose the right answer, he gets congratulations and a new problem. If it was a wrong answer, he gets a correction, which includes the correct term, definition, vignette, and a sound-file with pronunciation of the term. Then the user has to click to continue the tutorial. That click sends a string that re-awakens the script and cues it to send a new question. The state of the tutorial includes a score that reflects the user's cumulative progress on the tutorial. As the score mounts, the script progressively increases the difficulty of the questions. At the highest difficulty level, the user has to read either the definition or the vignette and respond by typing the correct term in a text box. There is no real endpoint to the tutorial: the user decides when he has had enough. Any given tutorial can be interrupted and resumed within 24 hours, after which the cookies expire. To avoid repetition of previous discussions, let me remind everybody that this script works perfectly every time as far as I can tell. That is to say, it never hangs and always gives the expected result. Also, with all the error-checking turned on, no error appears on the server log. The mysterious problem is that the script apparently doesn't terminate as expected. Although opportunities for mischief abound in any 500-line script, they all appear BEFORE the output stage. Since the output is as expected, I'm having trouble imagining what would cause the script to fail to terminate. I'm sure this script isn't up to professional standards, and becoming an IT professional is not among my ambitions. I'm offering the script free to users as a public service, and I just want to find a way to do that without crashing Hostmonster's servers. Your assistance will be sincerely appreciated. Script follows in part 2 because of space limitations. John M Rathbun MD