[perl] vérifier variable numérique

Fermé
tlep Messages postés 596 Date d'inscription jeudi 21 février 2002 Statut Membre Dernière intervention 25 octobre 2012 - 25 mars 2008 à 14:35
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 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 :-)
A voir également:

7 réponses

b0rice Messages postés 9 Date d'inscription mardi 25 mars 2008 Statut Membre Dernière intervention 1 avril 2008 1
1 avril 2008 à 00:44
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
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
1 avril 2008 à 08:53
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.
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
1 avril 2008 à 10:11
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
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
1 avril 2008 à 10:14
ou
 perl -e '"aaa"=~/^\d+$/?"":print "non numérique\n"'
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
1 avril 2008 à 10:26
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
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 569
1 avril 2008 à 10:34
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
0
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
1 avril 2008 à 13:48
merci pour les précisions.
0