Co to jest prawda i kłamstwo w Perl

W języku programowania Perl nie ma specjalnych wartości, które oznaczają prawdę i kłamstwo.

Każda wartość Perl może interpretować jako wartość logiczną. Na przykład, ciąg 'Hello' — to prawda. Poniższy kod wyświetli na ekranie wiersz 'true':

▶ Run
#!/usr/bin/perl

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

Jakie wartości są kłamstwem

W języku programowania Perl jest 5 wartości, które są kłamstwem. To:

  • undef
  • 0 — 0 liczba
  • 0.0 — liczba 0.0
  • '' — pusty wiersz
  • '0' — linia 0

Oto przykład kodu, który pokazuje, że wszystkie te wartości są interpretowane Perl jak kłamstwo. Kod wyświetli na ekran 5 razy słowo 'false':

▶ Run
#!/usr/bin/perl

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

Jakie wartości są prawdą

Prawdą są wszystkie wartości oprócz tych 5, które są kłamstwem.

Zasada

Aby zapamiętać, że jest false można użyć reguły: "Wszystko, co 0 to fałsz, poza '0 but true "wierszy".

Wszystkie te 5 wartości, które są false jeśli ich używać jako liczby zmieniają się w 0. Oto kod, który to potwierdza, kod wyświetli na ekran 5 zer:

▶ Run
#!/usr/bin/perl

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

To prawda, jeśli użyć use strict; i use warnings; (co prawie zawsze warto robić), w przypadku undef i pusty wiersz Perl pokaże ostrzeżenia.

Oto kod, a wynik jego pracy w przypadku 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

A oto kod i jego wynik w przypadku pustego wiersza:

▶ 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

W Perlu istnieją takie wartości, które w булевом kontekście są true, ale przy użyciu jako liczby stają się liczba zero. Wszystkie te wartości — to wiersze.

Na przykład, ciąg '0ASDF' — to jest właśnie przykład takiego znaczenia. Przy użyciu jako wartość logiczna ta linia zostanie zinterpretowany jako prawda. Naprawdę, są tylko 2 linie, które są kłamstwem — pusty wiersz i wiersz w którym znajduje się tylko jeden znak — liczba zero, wiersz '0ASDF' nie jest ani jednej z tych dwóch wierszy, więc nie kłamstwo, a prawda.

Oto kod, który pokazuje, że wiersz '0ASDF' jest prawdą (kod wyświetli na ekran ciąg 'true'):

▶ Run
#!/usr/bin/perl

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

W tym przypadku, jeśli ten sam ciąg '0ASDF' użyć jako liczba, to zostanie zinterpretowany jako liczba 0 (co prawda, przy włączonych use strict;, use warnings; będzie ostrzeżenie):

▶ 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

Najbardziej znane użycie 0 but true wartości odbywa się w Perl bibliotece DBI, tam ciąg '0E0'.

Array, Hash, Link

Tablica jest prawdą, jeśli jest w nim przynajmniej jedną wartość. Jeśli w tablicy nie ma żadnego znaczenia, to tablica jest kłamstwem.

Podobnie, jeśli w хеше jest przynajmniej jedna para wartości, to taki skrót jest prawdą. Jeśli w хеше nie ani jednej pary wartości, to jest to kłamstwo.

Link — to prawda, nie ważne na co ona się odwołuje. Nawet link na pustą tablicę [] lub pusty hash {} jest prawdą.

Jeden pusty wiersz

Najczęściej, aby napisać w kodzie prawdę jest używany liczba jeden, a do tego aby napisać kłamstwo jest używany liczba zero.

Ciekawe, że sam Perl uważa, że canonical znaczenie dla oznaczenia kłamstw nie jest to liczba 0, a pusty wiersz ''.

Oto przykład, który to pokazuje. Wzięliśmy wiersz 'Hello', który jest prawdą i za pomocą унарного operator ! zamienili w kłamstwo:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

Wynik — na ekranie pojawił się tekst $VAR1 = '';

Jeśli użyć operatora ! dwa razy, to otrzymamy kanoniczne znaczenie dla prawdy z punktu widzenia Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(na ekranie pojawi się tekst $VAR1 = 1;).

Problem czytelności

Najczęściej, aby napisać w kodzie prawdę jest używany liczba jeden, a do tego aby napisać kłamstwo jest używany liczba zero. Ale, niestety, z tych liczb nie jest jasne co to oznacza — liczba (i tam mogą być inne numery), czy to flaga oznaczająca prawdę.

Oto przykład. Tu 1 do workers oznacza, że trzeba użyć воркер (można wymienić na 10). A jedynka u log oznacza, że logowanie jest włączone (i można wymienić tylko na 0, aby wyłączyć):

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

Inne artykuły