regexp после regexp в perl

Domrachev Ivan domrachev.ivan at gmail.com
Thu Nov 29 10:45:11 MSK 2007


Здравствуйте

если cделать внутри perl_module один regexp, потом использовать
результат $1 (именно без кавычек), а затем второй регексп, то или
просто теряются переменные или вылазит мусор в переменных.
если заменить $1 на "$1", то всё работает нормально.
не знаю баг это или особенность.

более подробно:
---
http {
 include mime.types;
 default_type text/html;

 perl_modules /usr/local/nginx/perl;
 perl_require /usr/local/nginx/conf/test.pm;
 perl_set $test test::simple;

 server {
  server_name 127.0.0.1;
  listen 127.0.0.1:202;
  root /home2/;
  location / {
   add_header test_result $test;
  }
 }
}
---
package test;
use nginx;
sub simple {
 my $r=shift;
 my $uri=$r->uri;

 if($uri=~/(...)(...)/){
  $r->header_out("test_s1",$1);
  $r->header_out("test_s2",$2);
 }
 if($uri=~/(..)(..)/){
  $r->header_out("test_s3",$1);
  $r->header_out("test_s4",$2);
 }
 return 1;
}
1;
__END__
---

в таком варианте получается:
---
$ wget -S http://127.0.0.1:202/1234test.html
--07:18:08--  http://127.0.0.1:202/1234test.html
           => `1234test.html'
Connecting to 127.0.0.1:202... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Server: nginx/0.6.17
  Date: Thu, 29 Nov 2007 07:18:08 GMT
  Content-Type: text/html
  Content-Length: 2
  Last-Modified: Thu, 29 Nov 2007 07:12:17 GMT
  Connection: keep-alive
  test_s1: /1
Length: 2 [text/html]
...
---
т.е. просто НЕ добавила хеадеры, если трогать регулярные
выражения, то могут появиться переменные и мусор в них.
если поменять $1 на "$1" и соответственно $2 на "$2", то:
---
$ wget -S http://127.0.0.1:202/1234test.html
--07:20:55--  http://127.0.0.1:202/1234test.html
           => `1234test.html'
Connecting to 127.0.0.1:202... connected.
HTTP request sent, awaiting response... 
  HTTP/1.1 200 OK
  Server: nginx/0.6.17
  Date: Thu, 29 Nov 2007 07:20:55 GMT
  Content-Type: text/html
  Content-Length: 2
  Last-Modified: Thu, 29 Nov 2007 07:12:17 GMT
  Connection: keep-alive
  test_s1: /12
  test_s2: 34t
  test_s3: /1
  test_s4: 23
  test_result: 1
  Accept-Ranges: bytes
Length: 2 [text/html]
---
т.е. как надо.



-- 
С уважением,
 Domrachev                          mailto:Domrachev.Ivan at gmail.com






More information about the nginx-ru mailing list