Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: разработка для Web > Передача значений скрипту


Автор: study 2.12.2004, 14:39
Народ, помогите мне передать значения скрипту! Значения надо передать через ссылку, я пытаюсь сделать так:
формирую ссылку http://www.domen.ru/cgi-bin/script.cgi?var=5, но почемуто переменная в скрипт не передаёться???
я в скрипте обрабатываю входные параметры так:
Код

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;
 $value =~ s/<!--(.|\n)*-->//g;
 $input{$name} = $value;
}


по идее переданная мною в ссылке переменная должна находиться в $input{'var'}, может я что-то не то делаю smile
подскажите как это можно сделать.

Спасибо.

Автор: Forza 2.12.2004, 14:44
Используй модуль CGI.
В нём переданные скрипту значения получаются очень просто:
Код
use CGI qw(:standard);
my $var = param("var");

Да и в другом он тоже пригодится. smile

Автор: study 2.12.2004, 14:51
а без использования модуля CGI как-нибудь можно smile

Автор: Forza 2.12.2004, 14:54
Откуда нежелание использовать модуль?

Конечно, без него можно, но сложно. Я уже не помню, как это самостоятельно делается. smile

Автор: study 2.12.2004, 14:57
я просто точно не знаю, установлен ли этот модуль на машине где будет работать скрипт

Автор: korob2001 2.12.2004, 15:01
Замени эту строку:
Код

@pairs = split(/&/, $buffer);

на такую:
Код

@pairs = split(/&/, $ENV{ QUERY_STRING });


Цитата

я просто точно не знаю, установлен ли этот модуль на машине где будет работать скрипт

Этот модуль входит в стандартный пакет Perl. Если его специально не удалят, то он будет. Этот модуль не достоин того, что бы его удаляли, потому смело можешь юзать его.

Удачи.

Автор: study 2.12.2004, 15:17
СПАСИБО ВСЁ РАБОТАЕТ smile

Автор: GoodBoy 2.12.2004, 15:27
study
Смотри, тот вариант, что использовал ты расчитан на метод POST, то, что тебе предложил korob2001, - на метод GET... Теперь всё это соединяем и добавляем возможность передачи переменных из командной строки в формате:
script.pl var1=val1 var2=val2 var3=val3
Итог:

Код
our (%FORM, %NUMBER) = ();

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


Посте вызова в твоей программе &form_parse; в хэшах %FORM и %NUMBER будут содержаться значения, переданные скрипту...

Автор: chaos 3.12.2004, 08:23
Цитата(study @ 2.12.2004, 14:57)
я просто точно не знаю, установлен ли этот модуль на машине где будет работать скрипт

Это стандартный пакет, даже если и нет не переписывать же скрипт-модуль всегда можно поставить


и еще тыточно знаешь как сервер интерпретирует \n\n ??? Вот модуль CGI точно знает при выводе print header;

Автор: GoodBoy 3.12.2004, 13:44
Цитата(chaos @ 3.12.2004, 08:23)
и еще тыточно знаешь как сервер интерпретирует \n\n

А как он это может интерпретировать????????? smile

Автор: Phoinix 5.12.2004, 09:42
GoodBoy

Цитата(GoodBoy @ 3.12.2004, 13:44)
А как он это может интерпретировать?????????


#!/usr/bin/perl

my $var = '\n\n';
print $var;


Результат:
\n\n

как символы...

вот только непонятно
Цитата(chaos @ 3.12.2004, 08:23)
и еще тыточно знаешь как сервер интерпретирует \n\n


Причем здесь это... ;)

Автор: korob2001 5.12.2004, 13:23
Цитата

#!/usr/bin/perl

my $var = '\n\n';
print $var;

Да, только проблема здесь не в сервере, а в одинарных кавычках. Да и вообще интерпретирует не сервер, а Perl, если конечно последний не встроен в сервер в виде модуля расширения mod_perl.

Автор: GoodBoy 6.12.2004, 12:41
Phoinix
То, что ты написал я и так прекрасно знаю.... :-))) А в конце ты сам ещё раз повторил мой вопрос... :-)))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)