[perl] verificar si una variable es numérica

tlep Mensajes publicados 597 Estado Miembro -  
Char Snipeur Mensajes publicados 10112 Fecha de registro   Estado Colaborador Última intervención   -
Hola,

estoy intentando en Perl verificar si una variable pasada como argumento de un script es numérica.

He probado con éxito:
if ($ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' numérico.\n";}

En cambio, no logro usar el NOT (para obtener lo contrario):

if (!$ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' no numérico.\n";}
=> no funciona po
if ($ARGV[2] !=~ m/^\d+$/){print "Argument '".$ARGV[2]."' no numérico.\n";}
=> no funciona po
if !($ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' no numérico.\n";}
=> no funciona po

Gracias :-)
Configuración: Windows XP Firefox 2.0.0.11

7 respuestas

  1. b0rice Mensajes publicados 9 Estado Miembro 1
     
    Bonjour,

    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 Mensajes publicados 10112 Fecha de registro   Estado Colaborador Última intervención   1 331
     
    Hola.
    No entiendo por qué
    if (!$ARGV[2] =~ m/^\d+$/){print "Argument '".$ARGV[2]."' non numérique.\n";}
    no funciona. ¿Es por la prioridad de operadores? ¿Funcionaría un
    if (!($ARGV[2] =~ m/^\d+$/)){print "Argument '".$ARGV[2]."' non numérique.\n";}
    ? En caso contrario, ya no entiendo nada, el not sobre un booleano siempre debe funcionar normalmente.
    --
    Salud! antes yo creía, ahora estoy fijado.Jésus Christ
    Char Snipeur
    0
  3. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    Hola,

    aquí van algunas pruebas
    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 

    --
    106485010510997108
    0
  4. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    ou
     perl -e '"aaa"=~/^\d+$/?"":print "non numérique\n"' 

    --
    106485010510997108
    0
  5. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    otra posibilidad de probar lo no numérico es con la clase de caracteres complementada \D que busca los caracteres no numéricos
    root@debian:~# perl -e 'print "non numérique\n" if ("aaa" =~ /^\D+$/)' non numérique
    así no necesito negar
    simplemente busco una correspondencia no numérica

    --
    106485010510997108
    0
  6. lami20j Mensajes publicados 21506 Fecha de registro   Estado Moderador, Colaborador de seguridad Última intervención   3 571
     
    Para la info

    !~ no es exactamente una negación

    este operador quiere más bien decir encontrar la no coincidencia y no no encontrar la coincidencia
    --
    106485010510997108
    0
  7. Char Snipeur Mensajes publicados 10112 Fecha de registro   Estado Colaborador Última intervención   1 331
     
    gracias por las precisiones.
    --
    ¡Saludo! antes creía, ahora estoy decidido.Jesucristo
    Char Snipeur
    0