[perl] vérifier variable numérique

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. 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. Contributeur
      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.
      1. Modérateur
        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
        
        1. Modérateur
          ou
           perl -e '"aaa"=~/^\d+$/?"":print "non numérique\n"'
          
          1. Modérateur
            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
            1. Modérateur
              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