Just fire this up and point your browser to localhost. Then submit one of the last two forms and watch the hang
#!/usr/bin/perl -w use strict; use Cwd qw( cwd ); use File::Spec; $ENV{DOCUMENT_ROOT} = cwd(); chdir $ENV{DOCUMENT_ROOT}; use Data::Dumper; use HTTP::Daemon; use HTTP::Status; use CGI::Simple(); use CGI(); my $port = shift || 80; my $docroot = shift || $ENV{DOCUMENT_ROOT}; my $d = HTTP::Daemon->new( Reuse => 1, LocalPort => $port, ) or die "No daemon: $!\n"; warn "Ready to go!\n"; while (my $conn = $d->accept()) { handle_uri( $conn, $conn->get_request( 1 )); } sub handle_uri { my ($conn, $req) = @_; my $uri = $req->uri(); if ($uri =~ /images/) { serve_image( $conn, $req, $uri ); } else { serve_everything( $conn, $req, $uri ); } } sub serve_everything { my ($conn, $req) = @_; my $uri = $req->uri; $ENV{REQUEST_METHOD} = $req->method; $ENV{CONTENT_TYPE} = join('; ', $req->content_type ) || ''; $ENV{CONTENT_LENGTH} = $req->content_length || ''; $ENV{HTTP_USER_AGENT} = join('; ', $req->user_agent ) || ''; $ENV{SCRIPT_NAME} = $uri->path || 1; $ENV{QUERY_STRING} = $uri->query || ''; $ENV{HTTP_HOST} = $req->header('host'); $ENV{REMOTE_ADDR} = $conn->peerhost(); $ENV{REMOTE_PORT} = $conn->peerport(); foreach my $c (qw( cookie cookies )) { $ENV{uc $c} = join(';', $req->header( $c ) ) || ''; } my $cgi; { # warn '$ENV{CONTENT_LENGTH} = ',$ENV{CONTENT_LENGTH},$/; # local $_; # warn "read ", sysread($conn, $_, $ENV{CONTENT_LENGTH}, 0); # warn $_,$/,$/; local *main::STDIN = $conn; $cgi = CGI::Simple->new(); # $cgi = CGI->new(); # CGI works, CGI::Simple hangs :( } $conn->send_response( HTTP::Response->new( 200, 'OK', HTTP::Headers->new( Set_Cookie => $cgi->cookie( -name =>'sessionID', -value =>'xyzzy', -expires =>'+1y', -path =>'', -domain => $ENV{HTTP_HOST}, -secure => 0 ), Content_Type => "text/html"), "<font size=2><pre>". CGI::Simple->escapeHTML( scalar Dumper( $conn, $req, \%ENV, $cgi ) ). qq| </font></pre> <hr> <FORM METHOD="GET" ACTION="$ENV{SCRIPT_NAME}" ENCTYPE="application/x-www-form-urlencoded"> <input type="text" name"f"> <input type="reset" name=".reset" /> <input type="submit" name=".submit" /> </form> <FORM METHOD="POST" ACTION="$ENV{SCRIPT_NAME}" ENCTYPE="application/x-www-form-urlencoded"> <input type="text" name"f"> <input type="reset" name=".reset" /> <input type="submit" name=".submit" /> </form> <FORM METHOD="POST" ACTION="$ENV{SCRIPT_NAME}" ENCTYPE="multipart/form-data"> <INPUT TYPE="file" NAME="upload_file1" SIZE="42"> <INPUT TYPE="file" NAME="upload_file2" SIZE="42"> <input type="reset" name=".reset" /> <input type="submit"> </FORM> | ) ); $conn->print( 'nope', $@ ) if $@; } sub serve_image { my ($conn, $req, $uri) = @_; my $file = File::Spec->catfile( $docroot, $uri ); $conn->send_status_line( (-e $file ? 200 : 404 ) ); $conn->send_file_response( $file ); }

MJD says "you can't just make shit up and expect the computer to know what you mean, retardo!"
I run a Win32 PPM repository for perl 5.6.x and 5.8.x -- I take requests (README).
** The third rule of perl club is a statement of fact: pod is sexy.


In reply to Re: Re: Re: Re: using CGI on HTTP::Request from HTTP::Daemon by PodMaster
in thread using CGI on HTTP::Request from HTTP::Daemon by gregor-e

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.