[perl] vérifier variable numérique
tlep
Messages postés
597
Statut
Membre
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
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 :-)
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 :-)
Configuration: Windows XP Firefox 2.0.0.11
7 réponses
-
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 ;) -
Salut.
Je ne comprend pas pourquoiif (!$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'unif (!($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. -
Salut,
voici quelques testsroot@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 -
ou
perl -e '"aaa"=~/^\d+$/?"":print "non numérique\n"'
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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ériquecomme ça je n'ai pas besoin de nier
je cherche tout simplement une correspondance non-numérique
-
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 -
merci pour les précisions.