> >> If you want to loop over all the form fields, you'd do:
> >>
> >>   for $field (param()) {
> >>     print "$field => ", param($field), "<br>\n";
> >>   }
> >
> >How can the param's be placed into a new hash?
>
> CGI.pm has a Vars() method, I believe, which returns a hash.
>
>   use CGI;
>   my $q = CGI->new;
>   $data = $q->Vars;
>
>   print $data->{field};  # etc.
>
> But note that this can cause annoyances when you have multiple fields of
> the same name (like checkboxes).  The values will be \0-separated.

Fields are all unique.  I read the Vars section of 'perldoc CGI', but didn't
figure out how to use it.  Wound up with below, maybe some sort of better way,
not sure.  Reasons for wanting to do this:

1.  Rumored CGI has solid security.
2.  Looks a lot cleaner.
3.  Script contains $data{'something'} = "foo"; # redefinitions I don't think
can be done with param('something') = "foo"; (primary reason).

The problem with this is that it is slower than the old routine due to the
'for' loop.

sub get_data {

        $t0 = new Benchmark;

#   local($string);
#   if ($ENV{'REQUEST_METHOD'} eq 'GET') {
#      $_ = $string = $ENV{'QUERY_STRING'};
#      tr/\"~;/_/;
#      $string = $_;
#   } else {
#      read(STDIN, $string, $ENV{'CONTENT_LENGTH'});
#      $_ = $string;
#      $OK_CHARS='a-zA-Z0-9=&%\n\/_\-\.@';
#      tr/\"~;/_/;
#      $string = $_;
#   }
#   @data = split(/&/, $string);
#   foreach (@data)
#   {
#      split(/=/, $_);
#      $_[0] =~ s/\+/ /g;
#      $_[0] =~ s/%(..)/pack("c", hex($1))/ge;
#      $data{"$_[0]"} = $_[1];
#   }
#   foreach (keys %data)
#   {
#      $data{"$_"} =~ s/\+/ /g;
#      $data{"$_"} =~ s/%(..)/pack("c", hex($1))/ge;
#   }

        use CGI 'param';                # These lines replace those above.
        for (param()) {
                $data{$_} = param($_);
        }

        $t1 = new Benchmark;
        $td = timediff($t1, $t0);
        print "Code took:  ", timestr($td), "\n\n";

    %data;

        # Benchmark results:
        # Old routine:  Code took: 0 wallclock secs ( 0.01 usr + 0.00 sys = 0.01 CPU)
        # CGI:          Code took: 0 wallclock secs ( 0.08 usr + 0.00 sys = 0.08 CPU)
}

/g





-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to