ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: использование perl_set



Спасибо патч помог, но только на 1 вызов.. :)
Т.е. начиная со следующего перестает работать и значение больше не появляется...
Пишет тоже самое:
... failed: "Can't call method "header_in" on an undefined value at (eval 5) line 3...

А еще такой момент.
Переменные не могут быть установлены из модуля
если они заранее не проинциализированы.

Т.е. приходится прибегать к трюку:

perl_set $a 'sub {return ""; }';
perl_set $b 'sub {return ""; }';
perl_set $c module::setup;

а в модуле уже:
sub setup {
 $r->variable("a", 'A-value');
 $r->variable("b", 'B-Value');
 return 'C-value';
};

(просто в реальном примере процедура определения a,b,c - комплексная,
а значения нужны по отдельности)

Иначе вылетает еще при запуске
Restarting NGINX...
2006/11/24 20:33:50 [emerg] 24258#0: unknown "a" variable
Attempt to free unreferenced scalar: SV 0x644fa0, Perl interpreter: 0x582950. Attempt to free unreferenced scalar: SV 0x644db0, Perl interpreter: 0x582950.

И конечно в целом странно, что директивы встроенного перла
работают только на уровне http. На location тоже было бы очень хорошо.

----- Original Message ----- From: "Igor Sysoev" <is@xxxxxxxxxxxxx>
To: <nginx-ru@xxxxxxxxx>
Sent: Friday, November 24, 2006 5:10 PM
Subject: Re: использование perl_set


On Fri, 24 Nov 2006, Veryazov Sergey wrote:

Беру код из примера:
http://www.sysoev.ru/nginx/docs/http/ngx_http_perl_module.html

Выдает ошибку:

2006/11/24 12:01:40 [error] 30314#0: *3 call_sv("

  sub {
  my $r = shift;
  my $ua = $r->header_in("User-Agent");

  return "" if $ua =~ /Opera/;
  return "1" if $ua =~ / MSIE [6-9]\.\d+/;
  return "";
  }

") failed: "Can't call method "header_in" on an undefined value at (eval
2) line 3."

Оказывается, что параметр запроса не передается в функцию:
perl_set  $test 'sub { my $r = shift; return "($r)" }';
в итоге $test = '()';

В чем проблема?

nginx version: nginx/0.4.13
built by gcc 4.1.1 20060525 (Red Hat 4.1.1-1)

$perl -v
This is perl, v5.8.8 built for x86_64-linux-thread-multi

По-видимому, начиная с 0.3.38, nginx не работал с трэдовым перлом.
Патч прилагается.


Игорь Сысоев
http://sysoev.ru




 




Copyright © Lexa Software, 1996-2009.