Pergunta

No código abaixo, de um Postagem do blog por alias, Notei o uso do ponto de exclamação duplo !!. Eu queria saber o que significava e para onde eu poderia ir no futuro para encontrar explicações para sintaxe perl como essa. (Sim, eu já procurei por !! no 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;

    ...
}

ATUALIZAR
Obrigado por todas as suas respostas.

Aqui está outra coisa que acabei de descobrir que está relacionado O operador de squash da lista x!!

Foi útil?

Solução

São apenas dois ! Boolean não operadores sentados um ao lado do outro.

O motivo para usar esse idioma é garantir que você receba um 1 ou a 0. Na verdade, ele retorna uma corda vazia que numeros para 0. Geralmente é usado apenas no contexto numérico ou booleano.

Você costuma ver isso em Código Golf competições, porque é mais curto do que usar o ternário ? : operador com 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

Outras dicas

não não.

Ele converte o valor em um booleano (ou o mais próximo que Perl chega a uma coisa dessas).

Como três outras respostas afirmam que o intervalo é "0" ou "1", eu apenas pensei em mencionar que booleanos em Perl (conforme devolvido por operadores como ==, not, e assim por diante) são undef e 1, não 0 e 1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top