Les Allergies
Alimentaires
Posez votre question Signaler

[perl] vérifier variable numérique

tlep 591Messages postés 21 février 2002Date d'inscription - Dernière réponse le 1 avril 2008 à 13:48
Bonjour,
j'essaie en perl de vérifier si une variable en argument d'un script est numérique.
J'ai testé avec succès :
if ($ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' numérique.\n";}
En revanche, je ne parviens pas à utiliser le NOT (pour obtenir le contraire) :
if (!$ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' non numérique.\n";}
=> marche po
if ($ARGV[2] !=~ m/^\d+$/){print "Argument '".$ARGV[2]."' non numérique.\n";}
=> marche po
if !($ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' non numérique.\n";}
=> marche po
Merci :-)
Lire la suite 

[perl] vérifier variable numérique »

7 réponses
Réponse
+0
moins plus
Salut,

la négation dans une regexp en perl, c'est: $chaine !~ m/$re/;

Dans ton cas:

print 'Argument '.$ARGV[2].' non numérique' if ($ARGV[2] !~ m/^\d+$/);

Tu pouvais aussi faire:

print "Argument ".$ARGV[2];
if ( $ARGV[2] =~ m/^\d+$/ ) {
print " numérique\n";
}
else {
print " alphanumérique\n";
}

tout simplement ;)
Ajouter un commentaire
Réponse
+0
moins plus
Salut.
Je ne comprend pas pourquoi
if (!$ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' non numérique.\n";}
ne fonctionne pas. A cause de la priorité des opérateurs ? est-ce qu'un
if (!($ARGV[2] =~ m/^\d+$/)){print "Argument '".$ARGV[2]."' non numérique.\n";}
fonctionnerai. Sinon, j'y comprends plus rien, le not sur un booléen doit toujours fonctionner normalement.
Ajouter un commentaire
Réponse
+0
moins plus
Salut,

voici quelques tests
root@debian:~# perl -e 'print "non numérique\n" if ("aaa" !~ /^\d+$/)'
non numérique
root@debian:~# perl -e 'print "non numérique\n" if (!("aaa" =~ /^\d+$/))'
non numérique
root@debian:~# perl -e 'print "non numérique\n" unless ("aaa" =~ /^\d+$/)'
non numérique
Ajouter un commentaire
Réponse
+0
moins plus
ou
 perl -e '"aaa"=~/^\d+$/?"":print "non numérique\n"'
Ajouter un commentaire
Réponse
+0
moins plus
une autre possibilité de tester le non numérique c'est avec la classe de caractères complémenté \D qui cherche les caractères non numérique
root@debian:~# perl -e 'print "non numérique\n" if ("aaa" =~ /^\D+$/)'
non numérique
comme ça je n'ai pas besoin de nier
je cherche tout simplement une correspondance non-numérique
Ajouter un commentaire
Réponse
+0
moins plus
Pour l'info

!~ ce n'est pas tout à fait une négation

cet opérateur veut plutôt dire de trouver la non-correspondance et pas de ne pas trouver la correspondance
Ajouter un commentaire
Réponse
+0
moins plus
merci pour les précisions.
Ajouter un commentaire
Ce document intitulé « [perl] vérifier variable numérique » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?