Ñëåäóþùèé ñêðèïò î÷åíü íàïîìèíàåò òîëüêî ÷òî îáñóæäàâøèéñÿ, çà èñêëþ÷åíèåì òîãî, ÷òî äàííûé ñêðèïò èñïîëüçóåò ìåòîä POST äëÿ ïîñûëêè äàííûõ ôîðìû ñêðèïó CGI . Ìåòîä POST äàåò äèðåêòèâó áðîóçåðó ïîñëàòü äàííûå ôîðìû, èñïîëüçóÿ ñòàíäàðòíûé âõîä ñêðèïòà, à íå ñòðîêó çàïðîñîâ. Ïîëåçíîñòü ìåòîäà POST çàêëþ÷àåòñÿ â òîì, ÷òî îí ìîæåò îáðàáàòûâàòü áîëüøèå îáúåìû äàííûõ, òîãäà êàê ìåòîä GET îãðàíè÷åí ïðîñòðàíñòâîì ïåðåìåííîé ñåðâåðà, à òàêæå äëèíîé URL áðîóçåðà.
Äëÿ ÷òåíèÿ äàííûõ ñî ñòàíäàðòíîãî ââîäà ñêðèïò ìîæåò âûçâàòü ôóíêöèþ sys - read ñ íóæíûì ÷èñëîì áàéò. Ðàçìåð ñòðîêè çàïðîñà â áàéòàõ ñîäåðæèòñÿ â ïåðåìåííîé îêðóæåíèÿ CONTENT _ LENGTH .
Ïîñëå òîãî êàê ñêðèïò ïðî÷åë ñòðîêó çàïðîñîâ, äàëüíåéøàÿ îáðàáîòêà äàííûõ îêàçûâàåòñÿ î÷åíü ïîõîæåé íà ðàññìîòðåííóþ â ïðåäûäóùåì ïðèìåðå. Äëÿ òîãî ÷òîáû ñäåëàòü, ýòîò ñêðèïò áîëåå êîðîòêèì, îáðàáîòêà ñòðîêè çàïðîñîâ îñóùåñòâëÿåòñÿ ñ ïîìîùüþ íåñêîëüêî áîëåå ñëîæíîãî ïîäõîäà:
($cgi_bin, $cgi_script) = ($0 =~ m:(.*)[/\\](.*):);
$content_length = $ENV(CONTENT_LENGTH);
if (!definet($query) || $query eq ‘’) {
# ñãåíåðèðóåì ôîðìó
print <<FORM;
Content-type: text/html
<HTML>
<HEAD><TITLE>Sample POST Form </TITLE></HEAD>
<BODY>
What is your query? <P>
<FORM METHOD=”POST” ACTION=”$cgi_script”>
A checkBox. <BR>
<INPUT TYPE=”checkbox” NAME=”chek” VALUE=”on”><P>
A radio button set. <BR>
<INPUT TYPE=”radio” NAME=”button” VALUE=”1”> 1<BR>
<INPUT TYPE=”radio” NAME=”button” VALUE=”2”> 2<BR>
<INPUT TYPE=”radio” NAME=”button” VALUE=”3”> 3<P>
A data entry field<BR>
<INPUT NAME=”field”><P>
Send the data.<BR>
<INPUT TYPE=”submit”>
</FORM>
</HTML>
FORM
}
else {
# ðàñïå÷àòàåì ðåçóëüòàòû
print “Content-type: text/html\n\n”;
print “<HTML>\n”;
print “<HEAD><TITLE>POST Form Result</TITLE></HEAD>\n”
print “<BODY>\n”;
print “Your query values:<P>\n”;
@fields = split(‘&’, $query);
forech (@field) {
/([^=](.*)/ && do {
local ($filed, $value) = ($1, $2);
$query{$field} = &decode($value);
}
}
print “Check Box: $query{check}<BR>\n”;
print “Radio Button: $query{button}<BR>\n”;
print “Data Field:”, &html($query{field}), “<BR>\n”;
print “<HTML>\n”;
}
sub decode{
local ($value) = @_;
$value =~ s/\+/ /g;
$value =~ s/%([0-9A-H]{2})/pack(‘C’,hex($1))/eg;
return $value;
}
sub html {
local ($value) = @_;
$value =~ s/</</g;
$value =~ s/>/>/g;
return $ value ’
}
Ýòîò ñêðèïò èñïîëüçóåò îäíî ðåãóëÿðíîå âûðàæåíèå äëÿ àíàëèçà âñåõ çíà÷åíèé ïîëåé â ñòðîêå çàïðîñà:
/([^=](.*)/ && do {
local ($filed, $value) = ($1, $2);
$query{$field} = &decode($value);
}
Âìåñòî òîãî ÷òîáû ïðèñâàèâàòü çíà÷åíèÿ êàæäîãî çàïðîñà îòäåëüíîé ïåðåìåííîé. äàííàÿ ïðîãðàììà õðàíèò âñå çàïðîñû â àññîöèàòèâíîì ìàññèâå.  ñâîþ î÷åðåäü ñêðèïò ìîæåò èíäåêñèðîâàòü ìàññèâ, èñïîëüçóÿ íóæíûå èìåíà ïîëåé.
Îáðàòèòå âíèìàíèå íà ñî÷åòàíèå [^=] â ðåãóëÿðíîì âûðàæåíèè.  äàííîì êîíòåêñòå çíàê (^) íå ÿâëÿåòñÿ ÿêîðåì, óêàçûâàþùèì íà íà÷àëî ñòðîêè, êàê ýòî áûëî â ïðåäûäóùåì ïðèìåðå.  äàííîì ñëó÷àå ýòîò çíàê ñëóæèò îòðèöàíèåì Äëÿ çíàêà [=].  òàêîì êà÷åñòâå ðåãóëÿðíîå âûðàæåíèå ìîæåò áûòü ïðî÷èòàíî òàê: «ñîîòâåòñòâóåò îäíîìó èëè áîëåå ñèìâîëàì, íå âêëþ÷àÿ çíàê ðàâåíñòâà çàòåì ñîîòâåòñòâóåò çíàêó ðàâåíñòâà è çàòåì ñîîòâåòñòâóåò âñåì îñòàþùèìñÿ, ñèìâîëàì».