Was ist die Wahrheit und Falschheit in Perl

In der Programmiersprache Perl gibt es keine besonderen Werte, die die Bedeutung von Wahrheit und Lüge.

Jede Perl-Wert kann interpretiert werden als ein boolescher Wert. Zum Beispiel, Zeile 'Hello' — das ist die Wahrheit. Der folgende Code zeigt die Zeichenfolge 'true':

▶ Run
#!/usr/bin/perl

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

Welche Werte sind eine Lüge

In der Programmiersprache Perl gibt es 5 Werte, die Lügen sind. Es ist:

  • undef
  • 0 — Zahl 0
  • 0.0 — Zahl 0.0
  • '' — Leerzeile
  • '0' — Zeile 0

Hier ist ein Codebeispiel, das zeigt, dass alle diese Werte interpretiert Perl als eine Lüge. Der Code zeigt 5 mal das Wort 'false':

▶ Run
#!/usr/bin/perl

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

Welche Werte sind die Wahrheit

Wahrheit sind alle Werte, außer denen 5, die Lüge sind.

Die Regel

Um zu merken was ist false Sie können die Regel: "Alles was 0 ist false, außer '0 but true' Zeilen".

Alle diese 5 Werte sind false, wenn Sie Sie verwenden, wie die zahlen verwandeln sich in 0. Hier ist der Code, der dies bestätigt, wird der Code zeigt 5 Nullen:

▶ Run
#!/usr/bin/perl

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

Die Wahrheit, wenn Sie use strict; und use warnings; (was fast immer tun sollte), im Falle undef und leere Zeilen Perl zeigt Warnungen.

Hier ist der Code und das Ergebnis seiner Arbeit im Falle 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

Und hier ist der Code und das Ergebnis im Falle einer leeren Zeile:

▶ 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 gibt es solche Werte, die in булевом Kontext sind true, aber bei der Verwendung in als die zahlen verwandeln sich in der Zahl null. Alle diese Werte sind Zeichenfolgen.

Z. B. Zeile '0ASDF' — dieses ist gerade ein Beispiel. Bei der Verwendung als booleschen Wert diese Zeile wird interpretiert wie die Wahrheit. Wirklich, es gibt nur 2 Zeilen, die unwahr — der leere String und der String enthält nur ein Symbol — Nummer null, Zeile '0ASDF' ist nicht keiner von diesen beiden Zeilen, so dass es nicht die Lüge, sondern die Wahrheit.

Hier ist der Code, der anzeigt, dass die Zeile '0ASDF' ist die Wahrheit (Code zeigt die Zeichenfolge 'true'):

▶ Run
#!/usr/bin/perl

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

Wenn Sie dieselbe Zeichenfolge '0ASDF' als Zahl verwenden, wird als Wert 0 interpretiert (die Wahrheit, wenn die use strict;, use warnings; wird eine Warnung):

▶ 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

Die bekannteste Verwendung 0 but true Werte erfolgt in Perl Bibliothek DBI, dort wird die Zeile '0E0'.

Array, Hash, Referenz

Ein array ist eine Wahrheit, wenn es mindestens ein Wert. Wenn im array keine Werte, dann ein array ist eine Lüge.

Ebenso, wenn in хеше gibt es zumindest ein paar Werte, dann ist ein solcher Hash ist die Wahrheit. Wenn Nein хеше noch ein paar Werte, dann ist es eine Lüge.

Der Link ist immer die Wahrheit, egal auf was es verweist. Auch der Verweis auf ein leeres array [] oder eine leere Hash {} ist die Wahrheit.

Und eine leere Zeile ein

Am häufigsten, um in den Code zu schreiben, die Wahrheit wird eine Zahl, sondern um die Lüge zu schreiben verwendet die Zahl null.

Interessant ist, dass Perl selbst ist der Auffassung, dass der kanonische Wert zur Kennzeichnung der Lüge ist nicht die Anzahl der 0, und eine leere Zeichenfolge ''.

Hier ist ein Beispiel, das dies zeigt. Wir haben die Zeile 'Hello', das ist die Wahrheit und mit dem unären Operator ! verwandelten Sie in eine Lüge:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

Das Ergebnis auf dem Bildschirm erschien Text $VAR1 = '';

Wenn die Anweisung ! zwei mal, dann erhalten wir die kanonische Bedeutung für die Wahrheit in Bezug auf Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(auf dem Bildschirm erscheint der Text $VAR1 = 1;).

Das Problem der Lesbarkeit

Am häufigsten, um in den Code zu schreiben, die Wahrheit wird eine Zahl, sondern um die Lüge zu schreiben verwendet die Zahl null. Aber leider sind von diesen zahlen nicht ganz klar was das bedeutet — Zahl (und möglicherweise gibt es andere zahlen), oder es ist die Flagge der Wahrheit bedeutet.

Hier ist ein Beispiel. Hier 1 für workers bedeutet, dass es notwendig ist, eine воркер (kann ersetzt werden 10). Und Einheit bei log bedeutet, dass das Logging aktiviert (und ersetzen kann nur 0 zum ausschalten):

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

Andere Artikel