#!/usr/bin/env perl use Plack::App::Directory; use Plack::App::File; use Plack::Builder; use Plack::Util; my $sample_app = sub { my $env = shift; my $client_id = $env->{'REMOTE_ADDR'}; return [ '200', [ 'Content-Type' => 'text/plain' ], [ "Your IP address is ${client_id}." ], # or IO::Handle-like object ]; }; my $debug_hider = sub { my $app = shift; return sub { my $env = shift; Plack::Util::response_cb($app->($env), sub { my $res = shift; my $headers = Plack::Util::headers($res->[1]); if ( ! Plack::Util::status_with_no_entity_body($res->[0]) && ($headers->get('Content-Type') || '') =~ m!^(?:text/html|application/xhtml\+xml)!) { my $content = q{ }; return sub { my $chunk = shift; return unless defined $chunk; $chunk =~ s!(?=)!$content!i; return $chunk; }; } }); }; }; builder { enable $debug_hider; enable 'Debug'; mount '/myip' => $sample_app; mount '/css' => Plack::App::Directory->new(root => 'css')->to_app; mount '/img' => Plack::App::Directory->new(root => 'img')->to_app; mount '/js' => Plack::App::Directory->new(root => 'js')->to_app; mount '/remark.min.js' => Plack::App::File->new(file => 'remark.min.js')->to_app; mount '/' => Plack::App::File->new(file => 'slides-offline.html')->to_app; };