in reply to Need help with writing to db file

As an aside you should ditch the hand rolled param parser, see use CGI or die; for more details. You can replace all this:

if ($ENV{'REQUEST_METHOD'} eq 'GET') { $buffer = $ENV{'QUERY_STRING'}; } else { read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'}); } @pairs = split(/&/, $buffer); foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg; $FORM{$name} = $value; }

With this which is much more reliable as well as shorter...

use CGI 'Vars'; my %FORM = Vars();

I would also recomend reading Use strict, warnings and diagnostics or die as well as New Monks

Update

Imported Vars() method specifically as it is not part of the ':standard' set as pointed out by Coruscate

cheers

tachyon

s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print

Replies are listed 'Best First'.
Re^2: Need help with writing to db file
by Coruscate (Sexton) on Feb 09, 2003 at 20:40 UTC

    Perhaps this depends on the version of CGI, but 2.81 nor 2.89 at least do not export Vars() by default. You have to implicitly import ':cgi-lib' to call Vars() without using an object. That leaves us with either one of the following:

    use CGI qw/:standard :cgi-lib/; my %FORM = Vars(); # OR use CGI ':standard'; my $q = new CGI; my %FORM = $q->Vars(); # Oddly enough, the following do NOT work: use CGI ':standard'; my %FORM = CGI->Vars(); # or my %FORM = CGI::Vars();


    If the above content is missing any vital points or you feel that any of the information is misleading, incorrect or irrelevant, please feel free to downvote the post. At the same time, reply to this node or /msg me to tell me what is wrong with the post, so that I may update the node to the best of my ability. If you do not inform me as to why the post deserved a downvote, your vote does not have any significance and will be disregarded.

      You are correct that you need to specifically import the Vars() method as it is not part of the ':standard' set. A simple use CGI 'Vars'; will do. My mistake as I always use the OO interface.

      Without wanting it to look like sour grapes for you excellent correction of my incorrect code.....a pet peve of mine is people who do this:

      use CGI ':standard'; my $q = new CGI; $q->method();

      When you use the OO interface of CGI or CGI::Simple you don't need to import anything so just use CGI; is fine.

      BTW - The reason that the CGI->Vars() code does not work relates to the convoluted way in which CGI.pm works and specifically to how it instantiates the internal object.

      cheers

      tachyon

      s&&rsenoyhcatreve&&&s&n.+t&"$'$`$\"$\&"&ee&&y&srve&&d&&print