Que hace !! (punto de exclamación doble) ¿Media?
Pregunta
En el código a continuación, de un Publicación de blog por alias, Noté el uso del punto de exclamación doble !!
. Me preguntaba qué significaba y hacia dónde podría ir en el futuro para encontrar explicaciones para la sintaxis de Perl como esta. (Sí, ya busqué !!
a perlsyn).
package Foo;
use vars qw{$DEBUG};
BEGIN {
$DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;
sub foo {
debug('In sub foo') if DEBUG;
...
}
ACTUALIZAR
Gracias por todas tus respuestas.
Aquí hay algo más que acabo de encontrar que está relacionado El operador de squash de la lista x!!
Solución
Son solo dos !
booleanos no operadores sentados uno al lado del otro.
La razón para usar este idioma es asegurarse de recibir un 1
o 0
. En realidad, devuelve una cadena vacía que numifique a 0. Sin embargo, generalmente solo se usa en contexto numérico o booleano.
A menudo verás esto en Código de golf competiciones, porque es más corto que usar el ternario ? :
operador con 1
y 0
($test ? 1 : 0
).
!! undef == 0
!! 0 == 0
!! 1 == 1
!! $obj == 1
!! 100 == 1
undef ? 1 : 0 == 0
0 ? 1 : 0 == 0
1 ? 1 : 0 == 1
$obj ? 1 : 0 == 1
100 ? 1 : 0 == 1
Otros consejos
no.
Convierte el valor en un booleano (o tan cerca como Perl llega a tal cosa).
Debido a que otras tres respuestas afirman que el rango es "0" o "1", solo pensé en mencionar que los booleanos en Perl (como lo devuelven operadores como ==
, not
, y así sucesivamente) son undef
y 1
, no 0
y 1
.