Domanda

Nel codice qui sotto, da una post sul blog di Alias , ho notato che l'uso del doppio punto esclamativo !!. Mi chiedevo cosa significasse e dove ho potuto andare in futuro di trovare spiegazioni per la sintassi Perl come questo. (Sì, ho già cercato !! 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;

    ...
}

Aggiorna
Grazie per tutte le vostre risposte.

Ecco un'altra cosa ho appena scoperto che è legato La lista Squash operatore x!!

È stato utile?

Soluzione

E 'solo due ! booleani non gli operatori seduti uno accanto all'altro.

La ragione per usare questo idioma è quello di assicurarsi che si riceve una 1 o un 0. In realtà si restituisce una stringa vuota che numifys a 0. Di solito è usato solo in numerico o contesto booleano però.

È spesso vedere questo in Codice Golf gare, perché è più corta utilizzando l'operatore ternario ? : con 1 e 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

Altri suggerimenti

Non-no.

Si converte il valore a un valore booleano (o il più vicino Perl arriva a una cosa del genere).

Poiché altri tre risposte sostengono che la gamma è "0" o "1", ho solo pensato che avrei ricordare che booleani in Perl (come restituito da operatori come ==, not, e così via) sono undef e 1, non 0 e 1.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top