O que !! (Ponto de exclamação dupla) significa?
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!!
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
.