ただ私には不可解です。
関連するが別の質問: Perl で「0 but true」とはどういう意味ですか?
Perl は数の種類を区別しません。CS/プログラマ以外の目でそれらすべてを見ると、それらはすべて私にとっても同じことを意味します: ゼロ. (これは Perl の基礎の 1 つです。Perl はコンピューターではなく人のように機能しようとします。「アヒルのように見える場合....」)
したがって、それらを数値として使用する場合、それらはすべて同じものです。それらを文字列として使用する場合、それらは異なります。これは、1 つの解釈を強制する必要がある状況につながります (「0 but true」。「nancy Typing」も参照)。しかし、概して、自動的に「正しいことを行います」。
わかりません。他に何を意味するのでしょうか?
整数、科学、浮動小数点、符号付き整数、およびゼロの 8 進数表記を指定します。なぜ異なる必要があるのでしょうか。
0==0
ラリー・ウォールを含む誰もが知っているように。
Perl はすべてのスカラー値を文字列と (場合によっては) 数値の両方として解釈します。これらのゼロの文字列表現はすべて、perl の変換規則に従って、整数値 0 に変換できます。
"0"、"0.0"、"-0"、"+0"、"000" => ストレート文字列から数値への変換の最も単純なケース。"0e0" => 数値コンテキストでは、先頭の有効な数字のみが変換されるため、先頭の "0" のみが使用されます。たとえば、「1984abcdef2112」は数値的には 1984 と解釈されます。
perl の「0 but true」は、「0e0」のような文字列が数値的に 0 に評価されることを意味しますが、ブール値への変換は厳密な数値変換とは異なる規則に従うため、ブール値のコンテキストでは「true」になります。
Perl はコンテキストで動作します。文字列のコンテキストでは、それらはすべて異なります。数値コンテキストでは、それらはすべてゼロです。
print "same string\n" if '0' eq '0.0';
print "same number\n" if 0 == 0.0;
ブールコンテキストの「0 but true」は true です:
print "boolean context\n" if '0 but true';
print "string context\n" if '0 but true' eq '0';
print "numeric context\n" if '0 but true' == 0;