This works fine for me:
$ cat cgiapp.pl
#!/usr/local/bin/perl
use warnings;
use strict;
TestApp->new->run;
package TestApp;
use base qw|CGI::Application|;
use CGI::Application::Plugin::AutoRunmode;
use CGI::Application::Plugin::Session;
sub default : StartRunmode {
my $self = shift; my $output;
# get current access count
my $access_count = $self->session->param('access_count') || 0;
# increment access count
$access_count++;
# store new access count in session
$self->session->param(access_count => $access_count);
# get CGI object out of application
my $q = $self->query;
#build output
$output = $q->start_html(
-head => $q->meta({
-http_equiv => 'Content-Type',
-content => 'text/html; charset=UTF-8'
}),
-title => 'access count application'
);
$output .= $q->div("accessed $access_count time(s) this session");
$output .= $q->div(' ');
$output .= $q->div( $q->a( {-href => $q->self_url} => 'access again'
+ ) );
$output .= $q->end_html;
# set charset
$self->header_add( -type => "text/html; charset=UTF-8");
# give output to app to send to user
return( $output );
}
$ perl cgiapp.pl
Set-Cookie: CGISESSID=357a2d9c8f6ec5830c08beb44d12afb2; path=/
Date: Tue, 28 Dec 2010 01:31:47 GMT
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-U
+S">
<head>
<title>access count application</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
<div>accessed 1 time(s) this session</div><div> </div><div><a href="ht
+tp://localhost">access again</a></div>
</body>
</html>
I'm sure if you run the code on the server, perhaps in the debugger, the cause of the problem will quickly jump out at you.