Recherche…


Syntaxe

  • undef # faux
  • '' # Défini, faux
  • 0 # défini, a la longueur, faux
  • '0' # défini, a la longueur, faux

Remarques

Perl n’a pas de type de données booléen, et n’a pas non plus de mots-clés true et false comme beaucoup d’autres langues. Cependant, chaque valeur scalaire est évaluée à true ou false lorsqu'elle est évaluée dans un contexte booléen (la condition dans une instruction if ou une boucle while, par exemple).

Les valeurs suivantes sont considérées comme fausses:

  • '' , la chaîne vide. C'est ce que les opérateurs de comparaison intégrés renvoient (par exemple, 0 == 1 )
  • 0 , le nombre 0, même si vous écrivez comme 000 ou 0.0
  • '0' , la chaîne qui contient un seul 0 chiffre
  • undef , la valeur indéfinie
  • Objets qui utilisent la surcharge pour numify / stringify en valeurs fausses, telles que JSON::false

Toutes les autres valeurs sont vraies:

  • tout nombre non nul tel que 1 , 3.14 , 'NaN' ou 'Inf'
  • n'importe quelle chaîne qui est numériquement 0 mais pas littéralement la chaîne '0' , telle que '00' , '0e0' , "0\n" et "abc" .
    Si vous retournez intentionnellement une vraie valeur numérique, préférez '0E0' (utilisé par les modules bien connus) ou '0 but true' (utilisé par les fonctions Perl)
  • toute autre chaîne qui n'est pas vide, telle que ' ' , 'false'
  • toutes les références, même si elles font référence à des valeurs fausses, telles que \'' , [] ou {}
  • un tableau ou un hachage de valeurs fausses

Les opérateurs suivants sont généralement traités pour renvoyer un booléen dans un contexte scalaire:

  • @a si le tableau est vide ou non

  • %h retourne si le hachage est vide ou non

  • grep retourne si des éléments correspondants ont été trouvés ou non

  • @a = LIST et (LIST) = LIST renvoie si la liste de droite a produit des scalaires ou non

Liste des valeurs vraies et fausses

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
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow