One of the benefits of writing the hangman application as a plug-in is that you no longer need to write a CGI script at all. You can load and use the plug-in from any template, which you can process via a generic CGI script, a mod_perl handler, or perhaps the Apache::Template module.
Here's an example of a self-contained template using the hangman plug-in. All we need to do is to hardcode some variable values at the start of the template:
[% title = 'Template Toolkit Hangman #5' url = '/tt2/hangman.html' words = '/usr/games/hangman-words' icons = '/icons/hangman'; WRAPPER html/page html.head.title = title html.body.onload = 'if (document.gf) document.gf.guess.focus( )'; TRY; USE hangman = Games.Hangman( words = words icons = icons url = url ); hangman.play; CATCH; CLEAR; PROCESS error; END; END %]
If you're using Apache::Template to run the application, you can define these variables in the Apache httpd.conf file:
PerlModule Apache::Template TT2IncludePath /usr/local/tt2/hangman/hangman3/templates TT2IncludePath /usr/local/tt2/templates TT2Variable title "Template Toolkit Hangman #5" TT2Variable words /usr/games/hangman-words TT2Variable icons /icons/hangman TT2Params uri <Location /tt2/hangman.html> SetHandler perl-script PerlHandler Apache::Template </Location>
Our three variables, title, words, and icons, are defined using the TT2Variable directive. In addition, we use TT2Params to instruct Apache::Template to make the request URI available as the uri template variable. We previously used url to denote the URL of the hangman application, so we need to make one small change to the template. Using this dynamic uri variable should mean that the value will remain correct even if the application is moved to a new URL. The template should now look like this:
[% # ...etc... USE hangman = Games.Hangman( words = words icons = icons url = uri # now use 'uri' not 'url' ); # ...etc... %]
The game in Figure D-3 is for you to complete.