Suche…


Syntax

  • undef # False
  • '' # Definiert, Falsch
  • 0 # definiert, hat Länge, falsch
  • '0' # Definiert, hat Länge, ist falsch

Bemerkungen

Perl hat keinen booleschen Datentyp und auch keine true und false Schlüsselwörter wie viele andere Sprachen. Jeder skalare Wert wird jedoch als wahr oder falsch ausgewertet, wenn er in einem booleschen Kontext ausgewertet wird (z. B. die Bedingung in einer if-Anweisung oder einer while-Schleife).

Die folgenden Werte werden als falsch betrachtet:

  • '' , die leere Zeichenfolge. Dies ist, was die integrierten Vergleichsoperatoren zurückgeben (zB 0 == 1 ).
  • 0 , die Zahl 0, auch wenn Sie es als 000 oder 0,0 schreiben
  • '0' , die Zeichenfolge, die eine einzige 0-Ziffer enthält
  • undef , der undefinierte Wert
  • Objekte, die Überladen verwenden , um in falschen Werten zu nummerieren / stringify zu werden, wie z. B. JSON::false

Alle anderen Werte sind wahr:

  • jede Zahl ungleich Null wie 1 , 3.14 , 'NaN' oder 'Inf'
  • jede Zeichenfolge, die numerisch 0 ist, aber nicht wörtlich die Zeichenfolge '0' , wie '00' , '0e0' , "0\n" und "abc" .
    Wenn Sie absichtlich einen echten numerischen 0-Wert zurückgeben, ziehen Sie '0E0' (von bekannten Modulen verwendet) oder '0 but true' (von Perl-Funktionen verwendet) vor.
  • jede andere Zeichenfolge, die nicht leer ist, wie ' ' , 'false'
  • alle Referenzen, auch wenn sie auf falsche Werte verweisen, wie \'' , [] oder {}
  • ein Array oder ein Hash mit falschen Werten

Die folgenden Operatoren werden im Allgemeinen behandelt, um einen Booleschen Wert im skalaren Kontext zurückzugeben:

  • @a zurück, ob das Array leer ist oder nicht

  • %h zurück, ob der Hash leer ist oder nicht

  • grep zurück, ob übereinstimmende Elemente gefunden wurden oder nicht

  • @a = LIST und (LIST) = LIST zurück, ob die @a = LIST der rechten Seite Skalare erzeugt hat oder nicht

Liste der wahren und falschen Werte

use feature qw( say );

# Numbers are true if they're not equal to 0.
say 0             ? 'true' : 'false'; # false
say 1             ? 'true' : 'false'; # true
say 2             ? 'true' : 'false'; # true
say -1            ? 'true' : 'false'; # true
say 1-1           ? 'true' : 'false'; # false
say 0e7           ? 'true' : 'false'; # false
say -0.00         ? 'true' : 'false'; # false

# Strings are true if they're not empty.
say 'a'           ? 'true' : 'false'; # true
say 'false'       ? 'true' : 'false'; # true
say ''            ? 'true' : 'false'; # false

# Even if a string would be treated as 0 in numeric context, it's true if nonempty.
# The only exception is the string "0", which is false.
# To force numeric context add 0 to the string
say '0'           ? 'true' : 'false'; # false
say '0.0'         ? 'true' : 'false'; # true
say '0e0'         ? 'true' : 'false'; # true
say '0 but true'  ? 'true' : 'false'; # true
say '0 whargarbl' ? 'true' : 'false'; # true
say 0+'0 argarbl' ? 'true' : 'false'; # false

# Things that become numbers in scalar context are treated as numbers.
my @c = ();
my @d = (0);
say @c            ? 'true' : 'false'; # false
say @d            ? 'true' : 'false'; # true

# Anything undefined is false.
say undef         ? 'true' : 'false'; # false

# References are always true, even if they point at something false
my @c = ();
my $d = 0;
say \@c            ? 'true' : 'false'; # true
say \$d            ? 'true' : 'false'; # true
say \0             ? 'true' : 'false'; # true
say \''            ? 'true' : 'false'; # true


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow