/http.pl
use v5.10;
use strict;
use warnings;
my $PORT = 8080;
my $ROOT = '/';
{
use HTTP::Server::Simple::CGI;
use base qw(HTTP::Server::Simple::CGI);
use FindBin qw/$Bin/;
use Template;
use Dreamlands::Dreamer qw/generate_paragraph/;
my $tt = Template->new({
INCLUDE_PATH => "$Bin/templates",
});
{
my $links = int(rand(3));
my $n;
my @ranges;
for (1..$links) {
my $start = int(rand(@_));
my $end = $start + int(rand(3));
if ($end > @_ - 1) {
$end = @_ - 1;
}
for my $r (@ranges) {
if (($start >= $r->[0] && $start <= $r->[1]) || ($end >= $r->[0] && $end <= $r->[1])) {
# Range overlap; try again
next;
}
}
push @ranges, [$start, $end];
}
for my $r (@ranges) {
my $slug = join('-', map {
s/[^\w]//g; lc $_
} @_[$r->[0]..$r->[1]]);
$_[$r->[0]] = qq{<a href="$ROOT$slug">} . $_[$r->[0]];
$_[$r->[1]] .= '</a>';
}
@_
}
{
my ($self, $cgi) = @_;
my $path = $cgi->path_info();
print "HTTP/1.0 200 OK\r\n";
print $cgi->header(-charset => 'utf-8');
$path = substr($path, length($ROOT) - 1);
Dreamlands::Dreamer::seed($path);
my $para_count = int(rand(3)) + 2;
my $content = '';
for (1..$para_count) {
$content .= join(' ', linkify(generate_paragraph));
$content .= "\n\n" unless $_ == $para_count;
}
$tt->process('page.tt', {
content => $content,
path => $path,
});
}
}
my $server = Dreamlands::WebServer->new($PORT)->run;