use CGI::Push qw(:standard);
do_push(-next_page=>\&next_page, -last_page=>\&last_page, -delay=>0.5);
sub next_page { my($q,$counter) = @_; return undef if $counter >= 10; return start_html('Test'), h1('Visible'),"\n", "This page has been called ", strong($counter)," times", end_html(); }
sub last_page { my($q,$counter) = @_; return start_html('Done'), h1('Finished'), strong($counter),' iterations.', end_html; }
You provide CGI::Push with a pointer to a subroutine that will draw one page. Every time your subroutine is called, it generates a new page. The contents of the page will be transmitted to the browser in such a way that it will replace what was there beforehand. The technique will work with HTML pages as well as with graphics files, allowing you to create animated GIFs.
do_push.
When you call this method, you pass it a reference to a subroutine that is responsible for drawing each new page, an interval delay, and an optional subroutine for drawing the last page. Other optional parameters include most of those recognized by the
CGI header
method.
You may call do_push
in the object oriented manner or not, as
you prefer:
use CGI::Push; $q = new CGI::Push; $q->do_push(-next_page=>\&draw_a_page);
-or- use CGI::Push qw(:standard); do_push(-next_page=>\&draw_a_page);
Parameters are as follows:
do_push(-next_page=>\&my_draw_routine);
This required parameter points to a reference to a subroutine responsible for drawing each new page. The subroutine should expect two parameters consisting of the CGI object and a counter indicating the number of times the subroutine has been called. It should return the contents of the page as an array of one or more items to print. It can return a false value (or an empty array) in order to abort the redrawing loop and print out the final page (if any)
sub my_draw_routine { my($q,$counter) = @_; return undef if $counter > 100; return start_html('testing'), h1('testing'), "This page called $counter times"; }
If not specified, -delay will default to 1 second
Address bug reports and comments to: lstein@genome.wi.mit.edu