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