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