Problème Expression Regulière
Résolu
Ben
-
Ben -
Ben -
Bonjour à tous!
J'ai un petit problème avec une expression régulière. Lorsque j'exécute le code suivant, il me renvoi l'erreur "Use of uninitialized value $_ in pattern match etc...." au niveau du while.
Pourtant j'évite au maximum les variables automatiques, ma variable $barcode est définie il me semble, et à quel endroit utilise-t-il $_ ?
Bref je dois avouer que malgré mes recherches je ne vois pas ce qui n'est pas défini. Quelqu'un a une idée?
Merci beaucoup!
J'ai un petit problème avec une expression régulière. Lorsque j'exécute le code suivant, il me renvoi l'erreur "Use of uninitialized value $_ in pattern match etc...." au niveau du while.
Pourtant j'évite au maximum les variables automatiques, ma variable $barcode est définie il me semble, et à quel endroit utilise-t-il $_ ?
print "# Quel code-barre a ajouter (3 caracteres alphanumeriques) ?\n"; print "# Code-Barre: "; my $barcode=<stdin>; chomp $barcode; while ($barcode != /[a-z0-9]{3}/ig){ print "# Le code-barre doit etre compose de 3 caracteres alphanumeriques!\n"; print "# Nouveau code-barre: "; $barcode=<stdin>; chomp $barcode; }
Bref je dois avouer que malgré mes recherches je ne vois pas ce qui n'est pas défini. Quelqu'un a une idée?
Merci beaucoup!
A voir également:
- Problème Expression Regulière
- Expression écrite cm1 cm2 télécharger gratuit - Télécharger - Éducatifs
- Microsoft expression encoder - Télécharger - Divers Utilitaires
- Avoir du ping expression ✓ - Forum jeux en ligne
- C quoi un ping? ✓ - Forum Réseau
- Expression de recherche - Guide
2 réponses
Si tu utilises l'opérateur de différence numérique
Ce n'est pas comme cela que tu testes une recherche d'expression régulière dans une variable Perl, c'est avec l'opérateur
Il faut faire une négation de ta regexp avec un look-ahead.
Devrait produire de meilleurs résultats.
Dal
=!, Perl va évaluer ce qui est à droite pour tester l'absence d'égalité. Comme c'est une expression régulière, elle est évaluée dans $_ en l'absence d'autre affectation.
Ce n'est pas comme cela que tu testes une recherche d'expression régulière dans une variable Perl, c'est avec l'opérateur
=~.
Il faut faire une négation de ta regexp avec un look-ahead.
while ($barcode =~ /^(?!([a-z0-9]{3}$)).*$/ig){
Devrait produire de meilleurs résultats.
Dal
Salut, merci de ta réponse!
Effectivement ça marche aussi, mais j'ai réglé le problème d'une autre façon, plus longue et plus lourde (remplacement while par until, plus de différence numérique mais =~, ajout d'un élement avant et après le $barcode pour vérifier l'éxactitutde du {3}...).
En tout cas ta méthode est plus légère et probablement plus robuste, merci!
Effectivement ça marche aussi, mais j'ai réglé le problème d'une autre façon, plus longue et plus lourde (remplacement while par until, plus de différence numérique mais =~, ajout d'un élement avant et après le $barcode pour vérifier l'éxactitutde du {3}...).
En tout cas ta méthode est plus légère et probablement plus robuste, merci!