Forum Webscript.Ru

Программирование => Perl => Тема начата: nobody от 01 Августа 2003, 13:22:55

Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 13:22:55
Вопрос просто я передаю скрипту данные
http://www.site.ru/cgi-bin/test.pl?m=2&d=4

Как мне потом использовать данные которые передал, точнее что нужно сделать что бы я мог потом ими манипульровать в скрипте?

P.S. Камни не кидать... Perl незнаю.
Название: Знания perl стремятся к нулю
Отправлено: Wyclef от 01 Августа 2003, 13:29:56
shell> perldoc CGI
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 13:31:26
use CGI qw/:standard/;

$m = param(\'m\');
$d =param(\'d\');
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 13:31:50
Да читать доки я умею, но времени мало. Спасибо за ответ.

P.S. Гениальный ответ.
Проще было ответить как это сделать
Название: Знания perl стремятся к нулю
Отправлено: Wyclef от 01 Августа 2003, 13:35:43
[off]...нормально )))[/off]
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 13:56:35
неработает, пишет:
Global symbol "$f" requiresexplict package name at там то
:(
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 14:06:21
use strict;
use CGI qw/:standard/;

my $m = param(\'m\');
my $d =param(\'d\');
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 14:26:39
в адресной строке
test.pl?fff=milka

#### Скрипт ####
use strict;
use CGI qw/:standard/;
my $ffff = param(\'ffff\');
print "Content-Type: text/html\\n\\n";
print $ffff;
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 14:32:41
nobody это вопрос?
Название: Знания perl стремятся к нулю
Отправлено: Wyclef от 01 Августа 2003, 14:32:56
Цитировать
test.pl?fff=milka
#### Скрипт ####
use strict;
use CGI qw/:standard/;
my $ffff = param(\'ffff\');
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 15:25:16
Ну да, просто не работает, выдает 500 ошибку
Название: Знания perl стремятся к нулю
Отправлено: Wyclef от 01 Августа 2003, 15:28:43
Надеюсь, у тебя первая строчка скрипта такая?..
#!/путь_до_perl/perl
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 15:37:50
Строчка правильная...

Поскольку
print "Content-Type: text/html\\n\\n";
print "Ok
";

Работает прекрасно.
Ума не приложу в чем дело
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 15:40:22
nobody Полностью весь скрипт в студию.
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 15:48:31
#!c:/www/perl/bin/perl

use strict;
use Spreadsheet::WriteExcel;
use CGI qw/:standard/;

my $ffff = param(\'ffff\');

# Create a new workbook and add a worksheet
 my $workbook  = Spreadsheet::WriteExcel->new("c:\\\\www\\\\Apache\\\\htdocs\\\\test.xls");
 my $worksheet = $workbook->add_worksheet(\'date\');

# Set the column width for columns 1, 2, 3 and 4
$worksheet->set_column(0, 0, 6);
$worksheet->set_column(2, 2, 30);
$worksheet->set_column(3, 3, 10);
$worksheet->set_column(4, 14, 6);
$worksheet->set_column(15, 15, 10);


# Create a format for the column headings
my $header_1 = $workbook->add_format();
     $header_1->set_bold();
     $header_1->set_size(8);
     $header_1->set_align(\'left\');
     $header_1->set_color(\'black\');
     $header_1->set_align(\'center\');
     $header_1->set_align(\'vcenter\');
     $header_1->set_rotation(2);

my $header_2 = $workbook->add_format();
     $header_2->set_bold();
     $header_2->set_size(8);
     $header_2->set_align(\'left\');
     $header_2->set_color(\'black\');
     $header_2->set_align(\'center\');
     $header_2->set_align(\'vcenter\');

    my $header = $workbook->add_format();
    $header->set_bold();
    $header->set_size(8);
    $header->set_align(\'left\');
    $header->set_color(\'black\');
    $header->set_align(\'vcenter\');
    $header->set_text_justlast(1);

    my $column_1 = $workbook->add_format();
    $column_1->set_size(8);
    $column_1->set_align(\'left\');
    $column_1->set_color(\'black\');
       
     $worksheet->merge_range(\'H1:H5\', \'ENK 11000\', $header_1);
     $worksheet->merge_range(\'I1:I5\', \'ENK 11000\', $header_1);
     $worksheet->merge_range(\'J1:J5\', \'ENK 11000\', $header_1);
     $worksheet->merge_range(\'K1:K5\', \'ENK 11000\', $header_1);
     $worksheet->merge_range(\'L1:L5\', \'ENK 11000\', $header_1);
     $worksheet->merge_range(\'M1:M5\', \'ENK 11000\', $header_1);
     $worksheet->merge_range(\'N1:N5\', \'ENK 11000\', $header_1);
     $worksheet->merge_range(\'O1:O5\', \'ENK 11000\', $header_1);
     $worksheet->write(1, 15, \'AdamSaat\', $header_2);
   $worksheet->write(2, 15, \'Gecis\', $header_2);
   $worksheet->write(3, 15, \'Onayi\', $header_2);
   
   $worksheet->merge_range(\'A1:B1\', \'Bolge/Tip\', $column_1);
   $worksheet->merge_range(\'C1:G1\', \'$f_4\', $header);
   
   $worksheet->merge_range(\'A2:B2\', \'Grup\', $column_1);
   $worksheet->merge_range(\'C2:G2\', \'11000 / MERKEZ OFIS\', $header);

   $worksheet->merge_range(\'A3:B3\', \'Taseron\', $column_1);
   $worksheet->merge_range(\'C3:G3\', \'ENK / ENKA\', $header);

   $worksheet->merge_range(\'A4:B4\', \'Ekip Adi\', $column_1);
   $worksheet->merge_range(\'C4:G4\', \'00020-MERKEZ OFIS\', $header);

   $worksheet->merge_range(\'A5:B5\', \'Ekip Kodu\', $column_1);
   $worksheet->merge_range(\'C5:D5\', \'11000ENK20\', $header);

   $worksheet->write(5, 0, \'56071\', $header);
   $worksheet->merge_range(\'B6:C6\', \'TIMUR TUSUPBEKOV\', $column_1);
   $worksheet->write(5, 3, \'SOFOR\', $column_1);
   $worksheet->write(5, 4, \'\', $column_1);
   $worksheet->write(5, 5, \'\', $column_1);
   $worksheet->write(5, 6, \'\', $column_1);
   $worksheet->write(5, 7, \'\', $column_1);
   $worksheet->write(5, 8, \'\', $column_1);
   $worksheet->write(5, 9, \'\', $column_1);
   $worksheet->write(5, 10, \'\', $column_1);
   $worksheet->write(5, 11, \'\', $column_1);
   $worksheet->write(5, 12, \'\', $column_1);
   $worksheet->write(5, 13, \'\', $column_1);
   $worksheet->write(5, 14, \'\', $column_1);
   $worksheet->write(5, 15, \'\', $column_1);

   
   print "Content-Type: text/html\\n\\n";
   print "Ok
";
   print \'click\';
###############
Пока я не добавляю вот эти строки
use CGI qw/:standard/;
my $ffff = param(\'ffff\');
все работает идеально, после добовления ошибка :(
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 16:18:43
что в error_log?
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 16:24:28
говорится что $ffff неопределенна
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 16:29:02
nobody у тебя по-русски апач логи выдает?
дай лог в оригинале
Название: Знания perl стремятся к нулю
Отправлено: Phoinix от 01 Августа 2003, 16:30:24
Попробуй так:

use CGI;
$query = new CGI;
$ffff =$query -> param(\'ffff\');
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 16:33:21
Phoinix
А смысл?
Зaтык у него не там совсем.
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 16:37:10
Пробовал непомогает.... :((

И как мне это решить??????
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 16:46:44
Global symbol "$ffff" requires explicit  package name at c:\\www\\apache\\cgi-bin\\test.pl line (номер строки)
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 16:48:07
nobody ответить на мои вопрос
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 16:49:45
убери use strict;
работает?
Название: Знания perl стремятся к нулю
Отправлено: Phoinix от 01 Августа 2003, 17:07:05
nobody
Может не в тему, но у тебя модуль CGI вообще стоит?
Если ставил ActivePerl под винду, то его по-умолчанию нет...
Название: Знания perl стремятся к нулю
Отправлено: Phoinix от 01 Августа 2003, 17:10:06
Как альтернатива:

 $buffer = $ENV{\'QUERY_STRING\'};
 if ($ENV{\'REQUEST_METHOD\'} eq "POST") {read(STDIN, $buffer, $ENV{\'CONTENT_LENGTH\'})}
 @pairs = split(/&/, $buffer);
 foreach $pair (@pairs) {
  ($name, $value) = split(/=/, $pair);
  $name =~ tr/+/ /;
  $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;
 }

$ffff = $FORM{\'ffff\'};
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 17:18:57
Phoinix ты знаешь что вызывает ошибку
"Global symbol "$ffff" requires explicit package name at c:\\www\\apache\\cgi-bin\\test.pl line (номер строки)" ? Я знаю.
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 17:22:55
Цитировать
Phoinix:
Если ставил ActivePerl под винду, то его по-умолчанию нет...

На 100% уверен?
Название: Знания perl стремятся к нулю
Отправлено: Phoinix от 01 Августа 2003, 17:24:00
NeoNox
Сам ставил... а потом CGI доустанавливал...

А насчет ошибки точно не знаю, я strict использую только последнее время, но у меня подобные бывали до этого...
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 17:26:48
Phoinix ну и зря. Может на заре и были дистрибутивы без CGI.pm но я таких не встречал.
Название: Знания perl стремятся к нулю
Отправлено: Phoinix от 01 Августа 2003, 17:31:01
NeoNox
Честно говоря, я его очень редко использую, поэтому сильно не огорчился увидев, что его нет. :-)

P.S. А что все-таки означает ошибка??

Проверил...
При отсутствии CGI у меня вообще никакого эффекта в виде 500-й ошибки... :-( просто данные не берет и все...
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 17:38:15
Она означает что ты редко используешь use strict; в своих программах.
Переменная не определена. Лечится объявлением переменной с помощью my.
Название: Знания perl стремятся к нулю
Отправлено: Phoinix от 01 Августа 2003, 17:43:18
NeoNox
[OFF]Я как-то попробовал в одну из предыдущих своих программ вставить use strict, потом потратил около 2 часов расставляя my и local, а когда мне это надоело, я решил что use strict лучше писать в начале скрипта... :-)[/OFF]
Название: Знания perl стремятся к нулю
Отправлено: Wyclef от 01 Августа 2003, 17:54:37
Исходник, который показан выше у меня нормально отработал в винде...

только ругался на методы, после их заменты - заработал:
add_worksheet -> addworksheet
add_format -> addformat
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 17:56:53
Дело в этом :

use strict;

когда убрал все заработало.

спасибо за совет.
NeoNox с меня пиво :)
Название: Знания perl стремятся к нулю
Отправлено: Wyclef от 01 Августа 2003, 18:00:54
дык, в идеале должно и со strict-ом работать...
Название: Знания perl стремятся к нулю
Отправлено: NeoNox от 01 Августа 2003, 18:06:41
nobody это еще не спасибо
оставь use strict;
и в следующей за ним строке напиши my $ffff; или как там эта переменная у тебя называется.
вот тогда и будет спасибо
Название: Знания perl стремятся к нулю
Отправлено: nobody от 01 Августа 2003, 18:52:21
Да мне этот use strict, как мертвому припарка, поскольку задача немного в другом, главное что переменные получились, а все остальное не важно... Я пер использую только для генирации xls, просто средствами PHP этого нереализованно, вот и пришлось на скорую руку с perl\'ом разбираться. :)