Perl booléens, la négation (et comment l'expliquer)?

Je suis nouveau ici. Après la lecture par le biais de la façon de poser et de format, j'espère que ce sera OK question. Je ne suis pas très habile en perl, mais c'est le langage de programmation que j'ai connu la plupart.

Que j'essaie d'appliquer Perl pour la vraie vie, mais je n'ai pas une grande compréhension - surtout pas de ma femme. Je lui dis que:

si elle n'a pas à me 3 bières dans la soirée, cela signifie que je suis zéro (ou rien) bières.

Comme vous l'avez probablement deviné, sans beaucoup de succès. 🙁

Maintenant dans les faits. De perlop:

Unaire "!" effectue une négation logique, c'est "non".

Langues, qu'avez - boolean types (ce qui ne peut avoir que deux "valeurs") est OK:

si elle n'est pas une valeur -> doit être l'autre.

donc naturellement:

!true  -> false
!false -> true

Mais perl n'a pas boolean variables - n'ont qu'un truth system, whrere tout n'est pas 0, '0' undef, '' est VRAI. Problème, lors de l'application de négation logique à un pas la valeur logique par exemple chiffres.

E. g. Si certains nombre n'EST PAS 3, c'est moyen, il EST ZÉRO ou vide, au lieu de la la vraie vie sens, où si quelque chose n'est PAS 3, dire qu'il peut être rien mais 3 (par exemple, zéro en trop).

Donc le code suivant:

use 5.014;
use Strictures;

my $not_3beers = !3;

say defined($not_3beers) ? "defined, value>$not_3beers<" : "undefined";
say $not_3beers ? "TRUE" : "FALSE";

my $not_4beers = !4;
printf qq{What is not 3 nor 4 mean: They're same value: %d!\n}, $not_3beers if( $not_3beers == $not_4beers );
say qq(What is not 3 nor 4 mean: @{[ $not_3beers ? "some bears" : "no bears" ]}!) if( $not_3beers eq $not_4beers );

say ' $not_3beers>',  $not_3beers, "<";
say '-$not_3beers>', -$not_3beers, "<";
say '+$not_3beers>', -$not_3beers, "<";

imprime:

defined, value><
FALSE
What is not 3 nor 4 mean: They're same value: 0!
What is not 3 nor 4 mean: no bears!
 $not_3beers><
-$not_3beers>0<
+$not_3beers>0<

En outre:

perl -E 'say !!4'

qu'est-ce que pas pas 4 EST 1, au lieu de 4!

Les déclarations ci-dessus avec la femme sont "faux" (moyenne de 0) :), mais vraiment essayer enseigner à mon fils Perl et il, après un moment, demandé à ma femme: pourquoi, si quelque chose n'est pas 3 moyenne elle est de 0 ? .

Donc les questions sont:

  • comment expliquer cela à mon fils
  • pourquoi perl a cette conception, alors pourquoi !0 est à chaque fois 1
  • Est ici quelque chose "derrière" ce qui implique que !0 n'est pas tout nombre aléatoire, mais de 0.
  • comme je l'ai déjà dit, je ne sais pas bien d'autres langues, dans toutes les langues est !3 == 0?
Je pense qu'il y a une profonde argument essayer ici, je viens juste de ne pas voir ce qu'il est.
vais essayer de faire en perl logique avec ma femme & bières 🙂
Je n'ai pas eu non pas trois bières. Est-ce que j'ai eu quatre bières?
Probablement votre femme à l'aide de surcharge ! de l'opérateur. 🙂 La vérification de la overload::Overloaded $beer.
Le ! opérateur s'applique à des valeurs booléennes. L'expression !3 est un raccourci pour !(3 != 0), la mise entre parenthèses de l'expression qui représente l'implicite valeur booléenne qui est niée. Parce que (3 != 0) est vrai ou 1, sa négation est 0 ou false. C'est pourquoi !3 == !4.

OriginalL'auteur elfiress | 2013-07-05