O que é a verdade e a mentira em Perl

Na linguagem de programação Perl não há valores especiais, o que significa que a verdade e a mentira.

Qualquer valor Perl pode interpretar como um valor booleano. Por exemplo, uma linha 'Hello' — é a verdade. O código a seguir exibe a seqüência de 'true':

▶ Run
#!/usr/bin/perl

if ('Hello') {
    print 'true';
} else {
    print 'false';
}

Quais valores são mentiras

Na linguagem de programação Perl 5 valores, que são mentiras. Isto é:

  • undef
  • 0 — número de 0
  • 0.0 — número de 0.0
  • '' — uma cadeia de caracteres vazia
  • '0' — linha 0

Aqui está um exemplo de código que mostra que todos esses valores são interpretados Perl como uma mentira. O código irá imprimir na tela de 5 vezes a palavra 'false':

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    if ($val) {
        print "true\n";
    } else {
        print "false\n";
    }
}

Quais valores são a verdade

A verdade são todos os valores, exceto aqueles 5 que são mentiras.

Regra

Para lembrar que é falso você pode usar a regra: "Tudo o que o 0 é false, além de '0 but true' linhas".

Todos estes 5 valores, que são false se usá-los como números se transformam em 0. Aqui está o código que isso confirma o código irá imprimir na tela de 5 zeros:

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    print $val + 0, "\n";
}

É verdade, se você usar use strict; e use warnings; (que quase sempre vale a pena fazer), no caso de undef e a linha em branco Perl irá mostrar o aviso.

Aqui está o código e o resultado de seu trabalho, no caso de undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = undef;

print $var + 0;
Use of uninitialized value $var in addition (+) at script.pl line 8.
0

E aqui está o código e o seu resultado no caso de uma linha em branco:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '';

print $var + 0;
Argument "" isn't numeric in addition (+) at script.pl line 8.
0

0 but true

Em Perl, existem valores que estão булевом contexto são verdadeiras, mas quando usado em como os números se transformam em número zero. Todos esses valores são cadeias de caracteres.

Por exemplo, uma linha '0ASDF' — esse é um exemplo de tal valor. Quando usado como um valor booleano esta linha será interpretada como verdade. Realmente, há apenas 2 linhas, que são mentiras — uma string vazia, e a linha que contém apenas um símbolo — o número zero, a linha '0ASDF' não é nem uma dessas duas linhas, então ela não é mentira, mas é a verdade.

Aqui está o código que mostra que a linha '0ASDF' é a verdade (código exibirá uma mensagem de linha de 'true'):

▶ Run
#!/usr/bin/perl

if ('0ASDF') {
    print 'true';
} else {
    print 'false';
}

Neste caso, quando se esta mesma linha de '0ASDF' usar como um número, ele será interpretado como um número de 0 (a verdade, quando incluídos use strict;, use warnings; será um aviso):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '0ASDF';

print $var + 0;
Argument "0ASDF" isn't numeric in addition (+) at script.pl line 8.
0

O mais famoso o uso de 0 but true valores ocorre na biblioteca Perl DBI, lá usa uma seqüência de caracteres '0E0'.

Um Array, Hash, O Link

A matriz é verdade se tiver pelo menos um valor. Se a matriz não tem nenhum valor, então a matriz é uma mentira.

Da mesma forma, se a хеше há, pelo menos, um par de valores, esse hash é a verdade. Se não хеше nem mesmo um par de valores, então é uma mentira.

A referência é sempre verdade, não importa em que ela se refere. Até mesmo a referência a uma matriz vazia [] ou vazio hash {} é verdade.

Um e uma cadeia de caracteres vazia

Mais frequentemente do que para escrever o código a verdade é o número um, mas para escrever uma mentira é usado o número zero.

Curiosamente, o próprio Perl acredita que o valor para se referir a mentira não é o número de 0, em uma seqüência de caracteres vazia ''.

Aqui está um exemplo que mostra. Pegamos a linha 'Hello', que é a verdade e com a ajuda de um operador unário ! transformou-o em uma mentira:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

O resultado na tela apareceu o texto $VAR1 = '';

Se usar o operador ! duas vezes, então teremos o valor de verdade do ponto de vista de Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(aparece na tela o texto $VAR1 = 1;).

O problema de acessibilidade

Mais frequentemente do que para escrever o código a verdade é o número um, mas para escrever uma mentira é usado o número zero. Mas, infelizmente, a partir desses números não é clara o que significa o número (e pode haver outros números) ou é um sinalizador para indicar a verdade.

Aqui está um exemplo. Aqui 1 para workers significa que você precisa usar um воркер (pode substituir 10). E a unidade de você log significa que o log de mensagens personalizadas inclusive (e você pode substituir apenas a 0 para desativar):

my $config = {
    workers => 1,
    log => 1,
};

Outros artigos