The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
package MyApp;

use strict;
use warnings;

use base qw(CGI::Application);

use CGI::Application::Plugin::Cache::Adaptive;
use CGI::Application::Plugin::AutoRunmode;
use CGI::Application::Plugin::Session;

use Cache::FileCache;

sub setup {
    my ($self, @args) = @_;

    my $cgiapp = $self;

    $self->cache_adaptive({
        backend => Cache::FileCache->new({
            namespace => 'html_cache',
            max_size  => 10 * 1024 * 1024,
        }),
        expires_min => 3,
        expires_max => 60,
        check_load  => sub {
            my $entry = shift;
            int($entry->{process_time} * 2) - 1;
        },
        log => sub {
            my $logs = shift;

            if (ref $logs eq 'HASH' && exists $logs->{type}) {
                $cgiapp->{"Cache::Adaptive::type"} = $logs->{type};
            }
        }
    });

    $self->session;
    # $self->session->param('foo' => 1);
}

sub do_test1 : StartRunmode Cacheable(qw/path path_info query/) {
    sleep 3;
    return "test1";
}

sub do_test2 : Runmode Cacheable(qw/path path_info query/) {
    sleep 3;
    return "test2";
}

sub do_test3 : Runmode Cacheable(qw/path path_info query session/) {
    my $self = shift;
    sleep 3;
    return $self->session->id;
}

1;