3 votes

Perl next si regex stocké dans un tableau

J'ai un morceau de code avec une boucle while et un couple de next if comme ceci dans la boucle :

LOOP:
while (something) {
   next if $UPUPRF =~ /^T[0-9]{6}/;
   next if $UPUPRF =~ /^SECURITE.*/;
   next if $UPUPRF =~ /^AUDIT[A-Z]{2}/;
}

je voudrais mettre ces regex dans mon fichier de configuration (une structure de données perl) au lieu de les avoir "codés en dur" dans le script, afin que l'utilisateur puisse les modifier facilement en éditant simplement le fichier de configuration, et j'aimerais avoir votre avis à ce sujet.

Quelle est la manière la plus propre de faire cela ?

Tout d'abord, je suppose que je peux stocker les regex comme ceci dans le fichier de configuration ? (avec qr//) :

 ....
 exclude_acct => [
                    qr/^T[0-9]{6}/,
                    qr/^AUDIT[A-Z]{2}/,
                    qr/^SECURITE.*/,
                 ],
 ....

et dans ma boucle, dois-je utiliser quelque chose comme ceci ? :

foreach (@{ $myhash{exclude_acct} }) {
    next LOOP if $UPUPRF =~ /$_/;
}

Merci pour vos conseils.

salutations

note : je n'ai pas encore essayé ce code, je suppose juste que je pourrais le faire comme ça, mais je me demande surtout si c'est "propre" ou s'il existe une façon plus propre de le faire.

4voto

ikegami Points 133140

C'est bien, mais le démarrage du moteur de regex est relativement coûteux, il serait donc plus rapide de créer une regex à partir des nombreuses autres.

# Once, before the loop.
my $pat = join "|", @{ $myhash{exclude_acct} };
my $re = qr/$pat/;

# In the loop.
next LOOP if $UPUPRF =~ $re;

Cela peut briser les rétro-références ( \1 ), cependant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X