i'm currently converting several CGI scripts into mod_perl modules, and
i'm having difficulty in one particular situation reading the variable
input (i.e., query string on a GET or STDIN on POST).  quick background: i
had a PerlHandler on the end of this request for a while, accepting input
like "/foo?arg1=x&arg2=y" which would create a form w/posted data
(including binary info like .png, .gif, .jpg, and .mp3), save that data
and return a user to a location.  that was in the early stages of
developing this.  i'm now incorporating a more realistic shell around my
dynamic output, one that show our ads which are proxy calls to a netscape
ad server.

my solution was to create a basic HTML page that has a simple perl sub on
it, like so:

<!--File: foo.shtml -->
<html>
<head>
<title> My Dynamic Page </title>
</head>

<body>
<!--#AD CALL -->
<!--#perl sub="Foo::Bar" -->
<!--#MORE AD CALLS -->
</body>
</html>

a user gets to this page by clicking on a link like this:
"/foo.shtml?arg1=x&arg2=y".  my module starts off like this:

    my $r = shift;
    $r = $r->is_main ? $r : $r->main;
    my %args = ($r->method_number == M_GET) ? $r->args : $r->content;

but when i went from having the PerlHandler doing everything to having the
module being called like an SSI call, %args doesn't get populated anymore.  
so i tried a hack i've done before with CGI.pm, like this:

    unless (%args) {
        my $q = CGI->new;
        my @names = $q->param;
        $args{$_} = $q->param($_) for @names;
    }

but now, even this doesn't work, so i've had to put one more hack in, like
this:

    unless (%args) {
        my $original_request = $r->the_request;
        my ($query_string)   = ($original_request =~ m/\?(.*?)\s+HTTP.*/);
        my $q = CGI->new($query_string);
        my @names = $q->param;
        $args{$_} = $q->param($_) for @names;
    }

so it now works, but i feel kinda dirty.  and here's the last bit of
strangeness:  i have another page that is generated in the same manner
that works just fine.  the only difference is that the perl sub generates
a form that is *not* enctype="multipart/form-data".  both forms do,
however, POST their data.

any ideas why things are behaving so strangely?  is my hack as
objectionable as i think it is?

ky

Reply via email to