LINUX.ORG.RU

не отрабатывает скрипт Perl.


0

0

#!/usr/bin/perl
print "Content-type: text/html\n\n";

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

print "A + B =",$FORM{'a'}+$FORM{'b'},"<br>";
print "A - B =",$FORM{'a'}-$FORM{'b'},"<br>";
print "A * B =",$FORM{'a'}*$FORM{'b'},"<br>";
print "A<sup>B</sup> = ",$FORM{'a'}**$FORM{'b'};

в браузере прописываю:
localhost/cgi-bin/pr19.pl?a=10&b=2
а он не считает :(
A + B =0
A - B =0
A * B =0
AB = 1

Что не так?

★★★★★

Учитель дебажить код дебажными сообщениями.

Воткни перед первым принтом:

print "Got parameters: <br>".(join "", map {"\"$_\"=\"".$FORM{$_}."\"<br>"} keys %FORM)."<br>\n";

Посмотри, что оно реально получает.

vnovouhov
()
Ответ на: комментарий от vnovouhov

да и хорошо бы вызывать функцию после ее обьявления, даже если и работает так, как написано у вас -- лучше так не делать, -- если хочется увести тело вниз -- то тогда обьявите что будет такая функция выше:

sub parse_form;

vnovouhov
()
Ответ на: комментарий от splinter

Натыкай в parse_form print-ов через каждую строчку, с выводом всего что только можно, --- говорю-же, учится надо дебажить print-ами, может будет понятнее, что происходит. Распечатай query string, которая приходит, может там что

vnovouhov
()
Ответ на: комментарий от vnovouhov

спасибо за дельный совет! ошибка была здесь: foreach $pair (@pair)

s:/@pair/@pairs

splinter ★★★★★
() автор топика

Поставьте в начале скрипта следующее:

#!/usr/bin/perl -w
use strict;

Копмилятор обругает Вас за необъявленные переменные. Объявите их при помощи конструкции my $foo; , приведённой выше. Все ошибки будут как на ладони.

lodin ★★★★
()

С твоим разбираться неохота.
Возьми рабочий кусок.

sub get_data
{
local ($index,$key,$val,$data,@data,%data);
if ($ENV{'REQUEST_METHOD'} eq "GET") {
$data=$ENV{'QUERY_STRING'};
}
elsif ($ENV{'REQUEST_METHOD'} eq "POST") {
read (STDIN,$data,$ENV{'CONTENT_LENGTH'} ); }

$data=~ s/\+/ /g;
@data=split(/&/,$data);
foreach $index (@data)
{
($key,$val)=split(/=/,$index,2);
$key=~ s/%(..)/pack("c",hex($1))/ge;
$val=~ s/%(..)/pack("c",hex($1))/ge;
#$data{$key}.="0" if (defined($data{$key}));
$data{$key}.=$val;
}
return %data;
}

ovax ★★★
()

офигеть ребята
имхо незачем велосипед изобретать


use CGI::Carp;

my $a = param("a");
my $b = param("b");

x97Rang ★★★
()
Ответ на: комментарий от dimon555

вот и хорошо, открывается модуль CGI.pm и смотрится как бородатые дяди пишут модули

#### Method: param
# Returns the value(s)of a named parameter.
# If invoked in a list context, returns the
# entire list. Otherwise returns the first
# member of the list.
# If name is not provided, return a list of all
# the known parameters names available.
# If more than one argument is provided, the
# second and subsequent arguments are used to
# set the value of the parameter.
####

x97Rang ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.