Sök…


Syntax

  • undef # Falskt
  • '' # Definierat, falskt
  • 0 # Definierad, har längd, falsk
  • '0' # Definierat, har längd, falskt

Anmärkningar

Perl har ingen boolesk datatyp och har inte heller några true och false nyckelord som många andra språk. Men varje skalvärde utvärderas till sant eller falskt när det utvärderas i ett booleskt sammanhang (tillståndet i ett if-uttalande eller en stund-slinga, till exempel).

Följande värden betraktas som falska:

  • '' , den tomma strängen. Detta är vad de inbyggda jämförelsearbetarna returnerar (t.ex. 0 == 1 )
  • 0 , numret 0, även om du skriver det som 000 eller 0,0
  • '0' , strängen som innehåller en enda 0-siffra
  • undef , det odefinierade värdet
  • Objekt som använder överbelastning för att numifiera / radifiera till falska värden, till exempel JSON::false

Alla andra värden är sanna:

  • alla nummer som inte är noll, såsom 1 , 3.14 , 'NaN' eller 'Inf'
  • alla sträng som är numeriskt 0 men inte bokstavligen strängen '0' , till exempel '00' , '0e0' , "0\n" och "abc" .
    Om du avsiktligt returnerar ett sant numeriskt 0-värde, föredrar '0E0' (används av välkända moduler) eller '0 but true' (används av Perl-funktioner)
  • någon annan sträng som inte är tom, till exempel ' ' , 'false'
  • alla referenser, även om de hänvisar till falska värden, till exempel \'' , [] eller {}
  • en matris eller hash med falska värden

Följande operatörer behandlas vanligtvis för att returnera en boolean i skalärt sammanhang:

  • @a returnerar om matrisen är tom eller inte

  • %h returnerar om hash är tomt eller inte

  • grep returnerar om matchande objekt hittades eller inte

  • @a = LIST och (LIST) = LIST returnerar oavsett om den högra LISTEN producerade skalor eller inte

Lista över sanna och falska värden

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow