#!/usr/bin/perl use strict; use warnings; use CGI; use HTTP::Daemon; use HTTP::Request; use HTTP::Request::AsCGI; use HTTP::Response; use URI; $SIG{'PIPE'} = 'IGNORE'; my $server = HTTP::Daemon->new( LocalPort => 3000, ReuseAddr => 1 ) or die( "Can't create daemon: $!" ); print "Please contact me at: url, ">\n"; while ( my $client = $server->accept ) { my %e = ( REMOTE_ADDR => $client->peerhost, REMOTE_HOST => $client->peerhost, REMOTE_PORT => $client->peerport ); while ( my $request = $client->get_request ) { unless ( $request->uri->host ) { $request->uri( URI->new_abs( $request->uri, $server->url ) ); } my $c = HTTP::Request::AsCGI->new( $request, %e )->setup; my $q = CGI->new; print $q->header( -charset => 'UTF-8' ), $q->start_html( -title => 'Hello World', -encoding => 'UTF-8' ), $q->h1('Hello World'), $q->start_form, $q->table( $q->Tr( [ $q->td( [ 'Name', $q->textfield( -name => 'name' ) ] ), $q->td( [ 'Email', $q->textfield( -name => 'email' ) ] ), $q->td( [ 'Phone', $q->textfield( -name => 'phone' ) ] ), $q->td( [ 'File', $q->filefield( -name => 'file' ) ] ) ] ) ), $q->submit, $q->end_form, $q->h2('Parameters'), $q->Dump, $q->h2('Enviroment'), $q->table( $q->Tr( [ map{ $q->td( [ $_, $ENV{$_} ] ) } sort keys %ENV ] ) ), $q->end_html; my $response = $c->restore->response; # tell client to close socket to prevent blocking problems # in this single threaded daemon. $response->header( Connection => 'close' ); $client->send_response($response); } $client->close; }