Stocker les regexp dans des variables avec qr

Stocker les regexp dans des variables avec qr - Perl - Programmation

Marsh Posté le 13-12-2008 à 14:25:23    

Bonjour,
 
J'ai un petit soucis lorsque je stock mes regexps dans des variables avec qr.
 
L'exemple ci dessous fonctionne.
 

Code :
  1. my $regexp_ip = qr/^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$/;
  2. ...
  3. my @ls = readdir(D);
  4.  
  5. foreach(@ls) {
  6.     next unless($_ =~ m/$regexp_ip/i);
  7.     push(@ips, $_);
  8. }


 
L'exemple objet suivant ne fonctionne pas :
 

Code :
  1. ###############################################
  2. #Classe TOTO
  3. package TOTO;
  4. use strict;
  5. use warnings;
  6. sub new {
  7.   my ($class, $path) = @_;
  8.   my $this = {};
  9.   $this->{'regexp_ip'} = qr/^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$/;
  10.   bless($this, $class);
  11.   return $this;
  12. }
  13. sub get {
  14.   my ($this, $key) = @_;
  15.   return defined($this->{$key}) ? $this->{$key} : '';
  16. }
  17. ###############################################
  18. #Classe TITI
  19. package TITI;
  20. use strict;
  21. use warnings;
  22. use TOTO;
  23. sub new {
  24.   my ($class, $toto) = @_;
  25.   my $this = {};
  26.   $this->{'toto'} = $toto; # Ceci est un objet TOTO
  27.   bless($this, $class);
  28.   return $this;
  29. }
  30. sub test_ip {
  31.   ...
  32.  
  33.   my @ls = readdir(D);
  34.  
  35.   foreach(@ls) {
  36.     next unless($_ =~ m/$this->{'toto'}->get('regexp_ip')/i);
  37.     push(@ips, $_);
  38.   }
  39.  
  40.   ...
  41. }


 
Dans ce second exemple j'utilise un objet TOTO qui contient des informations communes à toutes l'application dont des regexp et cet objet est communiqué à tous les autres.
C'est pourquoi je souhaite utiliser sa regexp via $this->{'toto'}->get('regexp_ip'}.
 
Je pense qu'il doit falloir protéger l'appel car c'est un référence ou encore le protéger dans la structure m//, mais je ne vois pas comment faire.
 
Ne vous formalisez pas si il y a des fautes de synthaxe (ormis au niveau de l'appel de la regexp), car j'ai allégé le code pour mon post et tout le reste fonctionne bien sinon.
 
Merci d'avance pour votre aide,
 
Yellu

Reply

Marsh Posté le 13-12-2008 à 14:25:23   

Reply

Marsh Posté le 14-12-2008 à 14:05:59    

Fais un dump pour voir exactement comment sont tes structures.
http://search.cpan.org/~jhi/perl-5 [...] /Dumper.pm
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

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