Zoeken…


Syntaxis

  • undef # False
  • '' # Defined, False
  • 0 # Gedefinieerd, heeft lengte, vals
  • '0' # Gedefinieerd, heeft lengte, onwaar

Opmerkingen

Perl heeft geen Boolean-gegevenstype en heeft evenmin true en false zoekwoorden, zoals veel andere talen. Elke scalaire waarde wordt echter geëvalueerd naar waar of onwaar wanneer deze wordt geëvalueerd in een booleaanse context (bijvoorbeeld de voorwaarde in een if-instructie of een while-lus).

De volgende waarden worden als onwaar beschouwd:

  • '' , de lege string. Dit is wat de ingebouwde vergelijkingsoperatoren retourneren (bijvoorbeeld 0 == 1 )
  • 0 , het getal 0, zelfs als u het schrijft als 000 of 0,0
  • '0' , de tekenreeks die een enkel 0-cijfer bevat
  • undef , de ongedefinieerde waarde
  • Objecten die overbelasting gebruiken om te nummeren / stringiseren in valse waarden, zoals JSON::false

Alle andere waarden zijn waar:

  • elk niet-nul nummer zoals 1 , 3.14 , 'NaN' of 'Inf'
  • elke tekenreeks die numeriek 0 is, maar niet letterlijk de tekenreeks '0' , zoals '00' , '0e0' , "0\n" en "abc" .
    Als u opzettelijk een echte numerieke 0-waarde retourneert, geeft u de voorkeur aan '0E0' (gebruikt door bekende modules) of '0 but true' (gebruikt door Perl-functies)
  • elke andere tekenreeks die niet leeg is, zoals ' ' , 'false'
  • alle verwijzingen, zelfs als ze verwijzen naar valse waarden, zoals \'' , [] of {}
  • een array of hash van valse waarden

De volgende operatoren worden gewoonlijk behandeld om een boolean in scalaire context te retourneren:

  • @a geeft terug of de array leeg is of niet

  • %h geeft terug of de hash leeg is of niet

  • grep geeft terug of er overeenkomende items zijn gevonden of niet

  • @a = LIST en (LIST) = LIST retourneren of de rechterkant @a = LIST produceerde of niet

Lijst met echte en valse waarden

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
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow