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

Veryazov Sergey veryazov at mail.ru
Fri Nov 24 20:52:51 MSK 2006


Спасибо патч помог, но только на 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 at rambler-co.ru>
To: <nginx-ru at sysoev.ru>
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 






More information about the nginx-ru mailing list