Che cos'è la verità e menzogna in Perl

Nel linguaggio di programmazione Perl non ci sono particolari valori che indicano la verità e la menzogna.

Qualsiasi valore Perl può interpretare come un valore booleano. Ad esempio, la stringa 'Hello' — questa è la verità. Il codice seguente visualizza sullo schermo la stringa 'true':

▶ Run
#!/usr/bin/perl

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

Quali sono i valori di una bugia

Nel linguaggio di programmazione Perl ci sono 5 valori, che sono una bugia. Questo:

  • undef
  • 0 — numero 0
  • 0.0 — il numero 0.0
  • '' — una stringa vuota
  • '0' — riga 0

Ecco un esempio di codice che indica che tutti questi valori vengono interpretati Perl come una bugia. Il codice verrà visualizzato 5 volte la parola 'false':

▶ Run
#!/usr/bin/perl

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

Quali sono i valori di verità

La verità sono tutti i valori, tranne quei 5 che sono una bugia.

Regola

Per ricordare che è false, è possibile utilizzare la regola: "Tutto ciò che 0 è false, ad eccezione di '0 but true' di righe".

Tutti questi 5 valori, che sono false se usarli come i numeri si trasformano in 0. Ecco il codice che si conferma, il codice verrà visualizzato 5 zeri:

▶ Run
#!/usr/bin/perl

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

Tuttavia, se si utilizza use strict; e use warnings; (che è quasi sempre la pena di fare), in caso di undef e una riga vuota Perl mostrerà un avvertimento.

Ecco il codice e il risultato del suo lavoro in caso di 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

Ed ecco il codice e il suo risultato, nel caso di una stringa vuota:

▶ 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

In Perl ci sono valori che in булевом contesto sono true, ma se usato in come i numeri si trasformano in un numero zero. Tutti i valori sono stringhe.

Ad esempio, la stringa '0ASDF' — un esempio di tale valore. Quando si utilizza come valore booleano questa stringa viene interpretata come la verità. Davvero, ci sono solo 2 righe, che sono bugie — una stringa vuota e una stringa che contiene solo un simbolo — il numero zero, la stringa '0ASDF' non è nessuna di queste due righe, quindi non è una bugia, ma la verità.

Ecco il codice che indica che la stringa '0ASDF' è la verità (codice visualizza una riga 'true'):

▶ Run
#!/usr/bin/perl

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

In questo caso, se la stessa stringa '0ASDF' utilizzare come numero, sarà interpretata come il numero 0 (è vero, inclusi use strict;, use warnings; avviso):

▶ 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

La più famosa uso 0 but true valori avviene in libreria Perl DBI, ci viene utilizzata la stringa '0E0'.

Array, Hash, Riferimento

La matrice è la verità se in esso c'è almeno un valore. Se in una matrice di nessun valore, una matrice è una bugia.

Allo stesso modo, se in хеше c'è almeno una coppia di valori, tale hash è la verità. Se in хеше no sola coppia di valori, è una bugia.

Il riferimento è sempre la verità, non è importante cosa si fa riferimento. Anche il riferimento a un array vuoto [] o vuoto hash {} è la verità.

Uno e una stringa vuota

Spesso per scrivere nel codice la verità viene utilizzato il numero uno, ma per scrivere una bugia usato il numero zero.

È interessante notare che lo stesso Perl ritiene che il valore canonico per indicare la menzogna non è il numero di 0, e una stringa vuota ''.

Ecco un esempio che mostra. Abbiamo preso una stringa 'Hello', che è la verità e con l'aiuto di un operatore unario ! trasformata in una bugia:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

Il risultato sullo schermo è apparso il testo $VAR1 = '';

Se si utilizza l'operatore ! due volte, otterremo il valore canonico per la verità dal punto di vista Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(sullo schermo viene visualizzato il testo $VAR1 = 1;).

Il problema di leggibilità

Spesso per scrivere nel codice la verità viene utilizzato il numero uno, ma per scrivere una bugia usato il numero zero. Ma, purtroppo, di questi numeri non è chiaro cosa significa il numero (e ci possono essere altri numeri), o è un flag che indica la verità.

Ecco un esempio. Qui 1 per workers significa che è necessario utilizzare uno воркер (può essere sostituito su 10). E l'unità di il log significa che la registrazione è abilitata (e può essere sostituito solo su 0 per disattivare):

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

Altri articoli