in reply to chatterbox like server app

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; }