#!/usr/bin/perl package WebGuess; use strict; use Contize; sub new { my $self = {}; bless $self; $self = new Contize($self); return $self; } sub setNumber { my $self = shift; $self->{number} = int(rand(100)) + 1; } sub display { my ($self, $content) = @_; print $content; $self->suspend(); } sub getNum { my $self = shift; $self->display(<<"END");
Enter Guess:
END return $::q->param('num'); } sub run { my $self = shift; $self->setNumber(); my $guess; my $tries = 0; print "Hi! I'm thinking of a number from 1 to 100... can you guess it?
\n"; do { $tries++; $guess = $self->getNum(); print "It is smaller than $guess.
\n" if($guess > $self->{number}); print "It is bigger than $guess.
\n" if($guess < $self->{number}); } until ($guess == $self->{number}); print "You got it! My number was in fact $self->{number}.
\n"; print "It took you $tries tries.
\n"; } package Main; use strict; use CGI; use CGI::Session; use Data::Dumper; # Set up the CGI session and print the header $::q = new CGI(); my $session = new CGI::Session(undef, $::q, {Directory=>'/tmp'}); print $session->header(); # If there is a guess object in the session use it, otherwise create a new # WebGuess object and Contize it. my $g = $session->param('guess') || new WebGuess(); # Fix stuff -- most importantly the Data::Dumper version of the object doesn't # get recreated correctly (I don't know why)... so to work around it I re-eval # the thing. And we must reset the callstack and the callcount. my $VAR1; eval(Dumper($g)); $g = $VAR1; $g->resume(); # Add the WebGuess object to the session $session->param('guess', $g); # Enter the main loop of the WebGuess object until($::q->param('done')) { $g->run(); } # We won't get here until that exits cleanly (never!) print "Done.";