[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   -
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 :-)
Configuration: Windows XP
Firefox 2.0.0.11

7 réponses

  1. b0rice Messages postés 9 Statut Membre 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
  2. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    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
  3. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  4. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    ou
     perl -e '"aaa"=~/^\d+$/?"":print "non numérique\n"'
    
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  7. lami20j Messages postés 21506 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 571
     
    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
  8. Char Snipeur Messages postés 10112 Date d'inscription   Statut Contributeur Dernière intervention   1 331
     
    merci pour les précisions.
    0