Quelle est la vérité et le mensonge en Perl

Dans le langage de programmation Perl n'a pas de valeurs, ce qui signifie la vérité et le mensonge.

N'importe quelle valeur de Perl peut interpréter comme une valeur booléenne. Par exemple, la chaîne 'Hello' — c'est la vérité. Le code suivant affiche la chaîne de 'true':

▶ Run
#!/usr/bin/perl

if ('Hello') {
    print 'true';
} else {
    print 'false';
}

Quelles sont les valeurs sont des mensonges

Dans le langage de programmation Perl il y a 5 valeurs, qui sont des mensonges. C'est:

  • undef
  • 0 — nombre de 0
  • 0.0 — nombre de 0.0
  • '' — une chaîne vide
  • '0' — ligne 0

Voici un exemple de code qui montre que toutes ces valeurs sont interprétées Perl comme un mensonge. Le code affiche 5 fois le mot 'false':

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    if ($val) {
        print "true\n";
    } else {
        print "false\n";
    }
}

Quel sont la vérité

La vérité sont toutes les valeurs, à l'exception de ceux 5 qui sont des mensonges.

La règle

Pour mémoriser ce qui est false, vous pouvez utiliser la règle: "Tout ce que 0 est false, sauf '0 but true " de la ligne".

Tous ces 5 valeurs qui sont false si les nombres sont transformés en 0. Voici le code que cela confirme le code affichera des 5 zéros:

▶ Run
#!/usr/bin/perl

foreach my $val (undef, 0, 0.0, '', '0') {
    print $val + 0, "\n";
}

La vérité est, si vous utilisez use strict; et use warnings; (ce qui est pratiquement toujours en vaut la peine), dans le cas de undef et d'une ligne vide, Perl affichera un avertissement.

Voici le code et le résultat de son travail dans le cas de undef:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = undef;

print $var + 0;
Use of uninitialized value $var in addition (+) at script.pl line 8.
0

Et voici le code et son résultat dans le cas d'une chaîne vide:

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '';

print $var + 0;
Argument "" isn't numeric in addition (+) at script.pl line 8.
0

0 but true

En Perl, il existe des valeurs qui, dans un contexte booléen sont true, mais lorsqu' comme le nombre de se transformer en le nombre zéro. Toutes ces valeurs sont des chaînes.

Par exemple, la chaîne '0ASDF' — c'est juste un exemple d'une telle valeur. Lors de l'utilisation comme une valeur booléenne cette chaîne sera interprété comme une vérité. En effet, il y a seulement 2 lignes, qui sont des mensonges — une ligne vide et d'une chaîne qui ne contient qu'un seul caractère — le nombre zéro, la chaîne '0ASDF' n'est pas aucun de ces deux lignes, donc elle n'a pas le mensonge et la vérité.

Voici un code qui indique que la chaîne '0ASDF' est la vérité (code affichera la chaîne 'true'):

▶ Run
#!/usr/bin/perl

if ('0ASDF') {
    print 'true';
} else {
    print 'false';
}

Dans ce cas, si cette même chaîne '0ASDF' utiliser comme un nombre, il sera interprété comme un nombre de 0 (certes, inclus use strict;, use warnings; sera un avertissement):

▶ Run
#!/usr/bin/perl

use strict;
use warnings;

my $var = '0ASDF';

print $var + 0;
Argument "0ASDF" isn't numeric in addition (+) at script.pl line 8.
0

L'utilisation la plus célèbre 0 but true valeurs se produit dans la bibliothèque Perl DBI, on utilise une chaîne de '0E0'.

Un Tableau De Hachage, Le Lien

Le tableau est vraie si au moins une valeur. Si le tableau n'a ni la même valeur, alors un tableau est un mensonge.

De même, si le hachage possède au moins une paire de valeurs, ce hash est la vérité. Si le hachage n'est pas même pas une paire de valeurs, c'est un mensonge.

Le lien est toujours, la vérité est qu'elle fait référence. Même un lien vers un tableau vide [] ou vide de hachage {} est la vérité.

Une chaîne vide

Le plus souvent pour écrire dans le code de la vérité utilise le nombre d'un seul, mais pour écrire le mensonge est utilisé le nombre zéro.

Il est intéressant que Perl lui-même estime que la forme canonique de la valeur pour désigner le mensonge ce n'est pas le nombre de 0et la chaîne vide ''.

Voici un exemple qui montre ça. Nous avons pris la ligne 'Hello', qui est la vérité et avec l'aide de l'opérateur unaire ! transformé en un mensonge:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !'Hello';

Le résultat à l'écran est apparu un texte $VAR1 = '';

Si l'utilisation de l'opérateur ! deux fois, nous obtenons la forme canonique de la valeur de vérité du point de vue de Perl:

▶ Run
#!/usr/bin/perl

use Data::Dumper;

print Dumper !!'Hello';

(le texte d'écran $VAR1 = 1;).

Le problème de la lisibilité de l'

Le plus souvent pour écrire dans le code de la vérité utilise le nombre d'un seul, mais pour écrire le mensonge est utilisé le nombre zéro. Mais, malheureusement, de ces nombres n'est pas tout à fait clair que cela signifie — nombre (et il peut y avoir d'autres nombres), ou c'est un drapeau indiquant la vérité.

Voici un exemple. Il y a 1 pour workers signifie que vous devez utiliser un воркер (vous pouvez le remplacer par 10). A l'unité de log signifie que la journalisation est activée (et vous pouvez remplacer uniquement sur 0 pour désactiver):

my $config = {
    workers => 1,
    log => 1,
};

Autres articles