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

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top