Qu'est-ce !! (À double point d'exclamation) signifie?
Question
Dans le code ci-dessous, à partir d'un par Alias , j'ai remarqué l'utilisation du double point d'exclamation !!
. Je me demandais ce que cela signifiait et où je pouvais aller à l'avenir pour trouver des explications pour la syntaxe Perl comme ça. (Oui, je l'ai déjà cherché à !!
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;
...
}
UPDATE Merci pour toutes vos réponses.
Voici quelque chose d'autre que je viens de découvrir ce qui est lié La liste Squash opérateur x!!
La solution
Il est juste deux booléen !
pas les opérateurs assis à côté de l'autre.
La raison d'utiliser cet idiome est de vous assurer que vous recevez un 1
ou un 0
. En fait, il retourne une chaîne vide qui numifys à 0. Il est généralement utilisé en numérique, ou contexte booléen bien.
Vous verrez souvent cela dans code de golf concours, car il est plus court que d'utiliser l'opérateur ternaire avec ? :
1
et 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
Autres conseils
non pas.
Il convertit la valeur à une valeur booléenne (ou aussi près que Perl arrive à une telle chose).
Parce que trois autres réponses affirment que la gamme est « 0 » ou « 1 », Je pensais juste que je mentionne que booléens en Perl (comme retourné par les opérateurs comme ==
, not
, etc.) sont undef
et 1
, pas 0
et 1
.