inline sub в perl_set что-то не хочет работать
Igor Sysoev
is at rambler-co.ru
Mon Mar 13 13:47:10 MSK 2006
On Mon, 13 Mar 2006, Alexey Polyakov wrote:
> Попробовал я запустить перл, с примерами из документации.
> Если делаю perl_set $var hello::handler, то отрабатывает как и ожидалось.
> А если perl_set $var ' sub {....} ';, то ругается в error log:
>
> 2006/03/12 14:48:52 [error] 23133#0: *1 call_sv("
>
> sub {
> my $r = shift;
> my $ua = $r->header_in("User-Agent");
>
> return "O" if $ua =~ /Opera/;
> return "1" if $ua =~ / MSIE [6-9]\.\d+/;
> return "Z";
> }
>
> ") failed: "Undefined subroutine &main::
>
> sub {
> my $r = shift;
> my $ua = $r->header_in("User-Agent");
>
> return "O" if $ua =~ /Opera/;
> return "1" if $ua =~ / MSIE [6-9]\.\d+/;
> return "Z";
> }
>
> called." while closing request, client: ...., server: localhost,
> URL: "/", host: "...."
Прилагаемый патч решает проблему.
Игорь Сысоев
http://sysoev.ru
-------------- next part --------------
--- src/http/modules/perl/ngx_http_perl_module.c Sun Mar 5 23:15:50 2006
+++ src/http/modules/perl/ngx_http_perl_module.c Mon Mar 13 13:46:56 2006
@@ -692,10 +692,18 @@
static void
ngx_http_perl_eval_anon_sub(pTHX_ ngx_str_t *handler, SV **sv)
{
- if (ngx_strncmp(handler->data, "sub ", 4) == 0
- || ngx_strncmp(handler->data, "use ", 4) == 0)
+ u_char *p;
+
+ for (p = handler->data; *p; p++) {
+ if (*p != ' ' && *p != '\t' && *p != CR && *p != LF) {
+ break;
+ }
+ }
+
+ if (ngx_strncmp(p, "sub ", 4) == 0
+ || ngx_strncmp(p, "use ", 4) == 0)
{
- *sv = eval_pv((char *) handler->data, FALSE);
+ *sv = eval_pv((char *) p, FALSE);
return;
}
More information about the nginx-ru
mailing list