yellu | Bonjour,
J'ai un petit soucis lorsque je stock mes regexps dans des variables avec qr.
L'exemple ci dessous fonctionne.
Code :
- my $regexp_ip = qr/^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$/;
- ...
- my @ls = readdir(D);
-
- foreach(@ls) {
- next unless($_ =~ m/$regexp_ip/i);
- push(@ips, $_);
- }
|
L'exemple objet suivant ne fonctionne pas :
Code :
- ###############################################
- #Classe TOTO
- package TOTO;
- use strict;
- use warnings;
- sub new {
- my ($class, $path) = @_;
- my $this = {};
- $this->{'regexp_ip'} = qr/^[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}\.[0-9]{0,3}$/;
- bless($this, $class);
- return $this;
- }
- sub get {
- my ($this, $key) = @_;
- return defined($this->{$key}) ? $this->{$key} : '';
- }
- ###############################################
- #Classe TITI
- package TITI;
- use strict;
- use warnings;
- use TOTO;
- sub new {
- my ($class, $toto) = @_;
- my $this = {};
- $this->{'toto'} = $toto; # Ceci est un objet TOTO
- bless($this, $class);
- return $this;
- }
- sub test_ip {
- ...
-
- my @ls = readdir(D);
-
- foreach(@ls) {
- next unless($_ =~ m/$this->{'toto'}->get('regexp_ip')/i);
- push(@ips, $_);
- }
-
- ...
- }
|
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
|