Т.е. начиная со следующего перестает работать и значение больше не
появляется...
Пишет тоже самое:
... 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 не работал с трэдовым перлом.
Патч прилагается.
Игорь Сысоев