Frage

Im folgenden Code von a Blog -Beitrag von alias, Ich bemerkte die Verwendung des Doppelausrufpunkts !!. Ich fragte mich, was es bedeutete und wohin ich in Zukunft gehen konnte, um Erklärungen für Perl Syntax so zu finden. (Ja, ich habe bereits gesucht !! bei Perlyn).

package Foo;

use vars qw{$DEBUG};
BEGIN {
    $DEBUG = 0 unless defined $DEBUG;
}
use constant DEBUG => !! $DEBUG;

sub foo {
    debug('In sub foo') if DEBUG;

    ...
}

AKTUALISIEREN
Vielen Dank für all Ihre Antworten.

Hier ist etwas anderes, das ich gerade gefunden habe, das verwandt ist Der Listenkürbis -Operator x!!

War es hilfreich?

Lösung

Es sind nur zwei ! Boolesche nicht Betreiber sitzen nebeneinander.

Der Grund, dieses Idiom zu verwenden, besteht darin, sicherzustellen, dass Sie eine erhalten 1 oder ein 0. Eigentlich gibt es eine leere Zeichenfolge zurück, die auf 0 nennt. Es wird normalerweise nur im numerischen oder im booleschen Kontext verwendet.

Sie werden das oft in sehen Code Golf Wettbewerbe, weil es kürzer ist als die ternäre Verwendung zu verwenden ? : Bediener mit 1 und 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

Andere Tipps

nicht nicht.

Es konvertiert den Wert in einen Booleschen (oder so nah wie Perl an so etwas erreicht).

Da drei weitere Antworten behaupten, dass der Bereich "0" oder "1" ist, dachte ich nur, dass ich diese Booleschen in Perl erwähnen würde (wie von Betreibern wie zurückgegeben ==, not, und so weiter) sind undef und 1, nicht 0 und 1.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top