CGI-Thin
view release on metacpan or search on metacpan
lib/CGI/Thin.pm view on Meta::CPAN
So $cgi_data{'color'} will be the scalar value selected.
3) The user selects exactly more than one color.
So $cgi_data{'color'} will be a reference to an array of the values selected.
To fix this you could call the parser by giving it a list of keys that you want
to force to be arrays. In this case like...
use CGI::Thin;
my %cgi_data = &Parse_CGI ('color');
Now it they pick exactly one color, $cgi_data{'color'} will be a reference to
an array of the one value selected. And thus there will be no need for
special cases later in the code.
=head1 BUGS
=head2 Fixed
=over 4
=item *
Added %([0-9a-fA-F]{2} to the regular expression to avoid illegal escapes
=item *
Now split the key/value pairs by [;&] not just the ampersand
=back
=head2 Pending
=over 4
=item *
Long headers lines that have been broken over multiple lines in
multipart/form-data don't seem to be handled.
=item *
Large file uploads (like 150MB) will clobber main memory. One possible addition is
to change how multipart/form-data is read and to spit files directly to the temp directory
and return to the script a filename so it can be retreived from there.
=item *
Any thoughts on adapting it for use withing a mod_perl environment?
Under Apache::Registry, which emulates a CGI environmnet, it should be.
Under plain ol' mod_perl, we need to interact with the
Apache::Request class a bit instead of %ENV and STDIN.
This feature may be added in the next incarnation of the module, or possibly a companion
CGI::Thin::Mod_Perlish may be created to do it if the code will be too different.
=back
=head1 SEE ALSO
CGI::Thin::Cookies
=head1 SUPPORT
Visit CGI::Thin's web site at
http://www.PlatypiVentures.com/perl/modules/cgi_thin.shtml
Send email to
mailto:cgi_thin@PlatypiVentures.com
=head1 AUTHOR
R. Geoffrey Avery
CPAN ID: RGEOFFREY
modules@PlatypiVentures.com
http://www.PlatypiVentures.com/perl
=head1 COPYRIGHT
This module is free software, you may redistribute it or modify in under the same terms as Perl itself.
=cut
############################################# main pod documentation end ##
################################################ subroutine header begin ##
################################################## subroutine header end ##
sub Parse_CGI
{
my %hash = ();
foreach my $entry (split(/[&;]/, $ENV{'QUERY_STRING'})) {
&Insert_Item (\%hash, &Divide_Item ($entry));
}
if ((defined $ENV{'CONTENT_TYPE'}) && ($ENV{'CONTENT_TYPE'} =~ m|multipart/form-data|si)) {
my $in;
read(STDIN, $in, $ENV{'CONTENT_LENGTH'});
### Find the field "boundary" string.
my $boundary = substr($in, 0, index($in, "\r\n") - 1);
### Tokenize the input.
my @args = split(/\s*$boundary\s*/s, $in);
### remove extra pieces before first and after last boundary
shift @args;
pop @args;
foreach my $entry (@args) {
# Split the token into header and content
my ($head, $item) = split(/\r\n\r\n/ios, $entry, 2);
# ... name="CGI_FILE" filename="myfile.txt" ....
# so this is a bit of a trick, based on the double
# occurence of 'name'.
my ($name, $file) = ($head =~ /name="(.*?)"/gios);
my $mimetype;
if ($head =~ /Content-type:\s*(\S+)/gios) {
$mimetype = $1;
}
( run in 0.699 second using v1.01-cache-2.11-cpan-6aa56a78535 )