[Perl] patterns avec un object

patterns avec un object [Perl] - Perl - Programmation

Marsh Posté le 09-04-2004 à 15:53:37    

Je tente de faire un match à partir d'une methode d'un objet
 
j'aimerais éviter à avoir à me déclarer une variable pour faire le matching, pour plutot utilisé un truc comme le 2e ou 3e morceau de code
 
fonctionne

Code :
  1. my $test = $httpd_conf->DocumentRoot;
  2. if ($file->name =~ m/^$test\/?/) {
  3.   print "true\n";
  4. }


 
fonctionne pas

Code :
  1. if ($file->name =~ m/^$httpd_conf->DocumentRoot\/?/) {
  2.   print "true\n";
  3. }


 
fonctionne pas

Code :
  1. if ($file->name =~ m/^${httpd_conf->DocumentRoot}\/?/) {
  2.   print "true\n";
  3. }


 
 

Reply

Marsh Posté le 09-04-2004 à 15:53:37   

Reply

Marsh Posté le 09-04-2004 à 17:50:07    

tu peux utiliser (??{code}) :

Code :
  1. if ($file->name =~ m/^(??{$httpd_conf->DocumentRoot})\/?/) {
  2.       print "true\n";
  3.   }

Reply

Marsh Posté le 09-04-2004 à 18:45:26    

c'est 2 fois ??
 
dans mon bouquin c'était écrit (?{...}) et ca fonctionnait pas
 
super, jvais essayer

Reply

Marsh Posté le 09-04-2004 à 18:51:59    

pospos a écrit :

tu peux utiliser (??{code}) :

Code :
  1. if ($file->name =~ m/^(??{$httpd_conf->DocumentRoot})\/?/) {
  2.       print "true\n";
  3.   }




 
jviens d'essayer et ca ne fonctionne pas  :sweat:

Reply

Marsh Posté le 09-04-2004 à 19:28:53    

?{} ca execute sans interpoler, ??{} ca execute et ca interpole, mais ces deux fonctions sont assez contreversées...
 
Mais normalement ca doit marcher... t'es sur Perl 5.8 ?

Reply

Marsh Posté le 09-04-2004 à 19:38:03    

pospos a écrit :

?{} ca execute sans interpoler, ??{} ca execute et ca interpole, mais ces deux fonctions sont assez contreversées...
 
Mais normalement ca doit marcher... t'es sur Perl 5.8 ?


 
5.8.3
 
dailleurs on vient de tenter 2 trucs
 

Code :
  1. if ($file->name =~ m/(??{$httpd_conf->DocumentRoot})/) {
  2.   print "true\n";
  3. }


 
perl crash, core dump
 

Code :
  1. if ($file->name =~ m/^(??{$httpd_conf->DocumentRoot})/) {
  2.   print "true\n";
  3. }


 
pas de crash

Reply

Marsh Posté le 09-04-2004 à 19:43:21    

je viens meme de tester sous windows et ca ne fonctionne pas alors qu'en l'assignant à un variable $test, ca fonctionne
 

Code :
  1. use strict;
  2. use lib "E://projects/sdcbrm/projects/Common/dev/";
  3. use Apache::httpd::conf;
  4. my $httpd_conf = new Apache::httpd::conf("Z://httpd/httpd.conf" );
  5. my $test = $httpd_conf->DocumentRoot;
  6. if ("/web/htdocs" =~ m/^(??{$httpd_conf->DocumentRoot})\/?/) { 
  7.   print "true\n";
  8. }

Reply

Marsh Posté le 09-04-2004 à 19:58:04    

ouai c'est pas super comme fonction, je les utilise pas perso.
 
regarde perlre pour plus de details (et pourkoi ca plante parfois)
 
c'est clair que dans ton cas autant passer par une variable
 
PS: dans ton exemple tu as oublié de changer ta regexp

Reply

Marsh Posté le 09-04-2004 à 20:26:18    

(??{ code })  
WARNING: This extended regular expression feature is considered highly experimental, and may be changed or deleted without notice. A simplified version of the syntax may be introduced for commonly used idioms.  
 
deja là ca me dit rien de bon

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed