[perl] vérifier variable numérique [Fermé]

Signaler
Messages postés
596
Date d'inscription
jeudi 21 février 2002
Statut
Membre
Dernière intervention
25 octobre 2012
-
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
-
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 :-)

7 réponses

Messages postés
9
Date d'inscription
mardi 25 mars 2008
Statut
Membre
Dernière intervention
1 avril 2008
1
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 ;)
1
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 289
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.
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
ou
 perl -e '"aaa"=~/^\d+$/?"":print "non numérique\n"'
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
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
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 543
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
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 289
merci pour les précisions.