私はここに新しいです。質問方法と形式を読んだ後、これが問題ない質問になることを願っています. 私は perl にあまり熟練していませんが、私が最もよく知っているプログラミング言語です。
私は Perl を実生活に適用しようとしましたが、特に妻からはよく理解できませんでした。私は彼女にこう言います:
彼女が夕方にビールを3本持ってきてくれなかったら、それは私がビールを0 杯 (またはまったく飲まなかった)ことを意味します。
ご想像のとおり、あまり成功していません。:(
今、実際に。perlopから:
単項「!」論理否定、つまり「not」を実行します。
言語、boolean
型を持つもの (2 つの「値」のみを持つことができるもの) は問題ありません。
それが 1 つの値でない場合 ->別の値でなければなりません。
とても自然に:
!true -> false
!false -> true
しかし、perl には変数がboolean
ありませtruth system
ん。数値などの非論理値に論理否定を適用すると、問題が発生します。0
'0'
undef
''
たとえば、ある数値が3でない場合、実際の意味ではなく、それがゼロまたは空であることを意味します。3 でない場合、3 以外の値を意味します(例:ゼロも)。
次のコードは次のとおりです。
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, "<";
プリント:
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<
さらに:
perl -E 'say !!4'
4 でないものは、4 の代わりに1です!
上記の妻に関する記述は「偽」(0 を意味する) :) ですが、実際に息子に Perl を教えようとすると、息子はしばらくして妻に尋ねました: 3 でないものが 0 を意味するのはなぜですか? .
質問は次のとおりです。
- これを息子にどう説明するか
- なぜperlはこのデザインを持っているので、なぜ
!0
毎回1なのか - ここでは、乱数で
!0
はなく0よりも「背後にある」何かが必要です。 - すでに言ったように、私は他の言語をよく知りません - すべての言語で
!3 == 0
?