Problème Expression Regulière

Résolu
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 $_ ?

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:

2 réponses

[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
Si tu utilises l'opérateur de différence numérique
=!
, 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
0
Ben
 
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!
0