Perl Language
Goed en fout
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 (bijvoorbeeld0 == 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 nietgrep
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