Buscar..


Sintaxis

  • undef # falso
  • '' # Definido, falso
  • 0 # Definido, Tiene Longitud, Falso
  • '0' # definido, tiene longitud, falso

Observaciones

Perl no tiene un tipo de datos booleano, ni tiene ninguna false clave true o false como muchos otros idiomas. Sin embargo, cada valor escalar se evaluará como verdadero o falso cuando se evalúe en un contexto booleano (la condición en una instrucción if o un bucle while, por ejemplo).

Los siguientes valores se consideran falsos:

  • '' , la cadena vacía. Esto es lo que devuelven los operadores de comparación incorporados (por ejemplo, 0 == 1 )
  • 0 , el número 0, incluso si lo escribes como 000 o 0.0
  • '0' , la cadena que contiene un solo 0 dígitos
  • undef , el valor indefinido
  • Objetos que utilizan la sobrecarga para numerar / encadenar en valores falsos, como JSON::false

Todos los demás valores son verdaderos:

  • cualquier número distinto de cero, como 1 , 3.14 , 'NaN' o 'Inf'
  • cualquier cadena que sea numéricamente 0 pero no literalmente la cadena '0' , como '00' , '0e0' , "0\n" y "abc" .
    Si intencionalmente está devolviendo un valor numérico verdadero 0, prefiera '0E0' (usado por módulos conocidos) o '0 but true' (usado por las funciones de Perl)
  • cualquier otra cadena que no esté vacía, como ' ' , 'false'
  • todas las referencias, incluso si hacen referencia a valores falsos, como \'' , [] o {}
  • Una matriz o hash de valores falsos.

Los siguientes operadores se tratan normalmente para devolver un valor booleano en contexto escalar:

  • @a devuelve si la matriz está vacía o no

  • %h devuelve si el hash está vacío o no

  • grep devuelve si se encontraron elementos coincidentes o no

  • @a = LIST y (LIST) = LIST devuelve si la LISTA del lado derecho produjo o no escalas

Lista de valores verdaderos y falsos

use feature qw( say );

# Numbers are true if they're not equal to 0.
say 0             ? 'true' : 'false'; # false
say 1             ? 'true' : 'false'; # true
say 2             ? 'true' : 'false'; # true
say -1            ? 'true' : 'false'; # true
say 1-1           ? 'true' : 'false'; # false
say 0e7           ? 'true' : 'false'; # false
say -0.00         ? 'true' : 'false'; # false

# Strings are true if they're not empty.
say 'a'           ? 'true' : 'false'; # true
say 'false'       ? 'true' : 'false'; # true
say ''            ? 'true' : 'false'; # false

# Even if a string would be treated as 0 in numeric context, it's true if nonempty.
# The only exception is the string "0", which is false.
# To force numeric context add 0 to the string
say '0'           ? 'true' : 'false'; # false
say '0.0'         ? 'true' : 'false'; # true
say '0e0'         ? 'true' : 'false'; # true
say '0 but true'  ? 'true' : 'false'; # true
say '0 whargarbl' ? 'true' : 'false'; # true
say 0+'0 argarbl' ? 'true' : 'false'; # false

# Things that become numbers in scalar context are treated as numbers.
my @c = ();
my @d = (0);
say @c            ? 'true' : 'false'; # false
say @d            ? 'true' : 'false'; # true

# Anything undefined is false.
say undef         ? 'true' : 'false'; # false

# References are always true, even if they point at something false
my @c = ();
my $d = 0;
say \@c            ? 'true' : 'false'; # true
say \$d            ? 'true' : 'false'; # true
say \0             ? 'true' : 'false'; # true
say \''            ? 'true' : 'false'; # true


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow