Here's a little ajax one I just put together. Enjoy!
#!/usr/bin/perl -w
use strict;
use CGI;
use CGI::Ajax;
use Storable qw/lock_store lock_retrieve/;
our $file = '/tmp/messages';
our $MAX_MESSAGES = 10;
our $table = eval { lock_retrieve($file) } || {};
my $cgi = new CGI;
my $pjx = new CGI::Ajax( 'do_chat' => \&do_chat );
print $pjx->build_html( $cgi, \&show_page);
sub do_chat {
my ( $name, $msg ) = @_;
if ( $name && $msg ) {
push @{ $table->{messages} }, [ $name, $msg ];
shift @{ $table->{messages} }
while @{ $table->{messages} } > $MAX_MESSAGES;
lock_store $table, $file;
}
return join "\n", map "[" . $cgi->escapeHTML($_->[0]) . "] : " .
$cgi->escapeHTML( $_->[1] ), @{ $table->{messages} };
}
sub show_page {
return
$cgi->start_html(
-onload => q{setInterval( 'do_chat( [],[\\'result\\'] )
+',1000 );} )
. $cgi->pre( { id => 'result' }, " " )
. $cgi->textfield( -name => 'name', -size => 10,
-value => 'name', -id => 'name' )
. $cgi->textfield( -name => 'msg', -size => 50,
-value => 'message', -id => 'msg' )
. $cgi->submit(
-name => 'speak',
-value => 'speak',
-onclick => q{do_chat( ['name','msg'],['result'] );}
) . $cgi->end_html;
}