ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
Nginx-ru mailing list archive (nginx-ru@sysoev.ru)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

regexp после regexp в perl


  • To: nginx-ru@xxxxxxxxx
  • Subject: regexp после regexp в perl
  • From: Domrachev Ivan <domrachev.ivan@xxxxxxxxx>
  • Date: Thu, 29 Nov 2007 10:45:11 +0300
  • Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:date:x-mailer:x-priority:message-id:to:subject:mime-version:content-type:content-transfer-encoding:from; bh=HtiNq8A3Ia/1U+UeHrz6E+FK5cJX9ZPWi+GOL9oEY4Q=; b=Dt4sQw1A6hh2y7l3wsMWGtkkLgYbwRqEFYLapxIuWNO6yCIr86a8HxL/24V+Ksy6MdffrOYpboUMzH2+Wniqd7q8FPnlr6ObdURZ20dZhaS7wXaDn6PzndWF/07b34jCsFm6hp/FKWWPh6pTR5Qccyr9DdHHtHDtmUm5cKJMurA=
  • Domainkey-signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=received:date:x-mailer:x-priority:message-id:to:subject:mime-version:content-type:content-transfer-encoding:from; b=fTQned4Roz+Wi16Dg5C42Eo4mKmhB4dMcARUVtzj70z+nj8b+nJRvRrW3ssGEjgDsxA+/+wIe7a85mbBi3bgUCwoa970RBXW5Eu0ox90T1W3kukUQE3V+gLEQfP9b6w1Mz5yJ0TD0oDV9q2p8XkpZJmdN0VDeyhVNxczQjPYlJ0=

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

если 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@xxxxxxxxx




 




Copyright © Lexa Software, 1996-2009.