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!!

¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top