Perlは、C、 awk、Bourne シェル、およびその他の多くの言語を含む、他の多くの言語から機能を継承します。
C では、値 0 は false であり、ゼロ以外の値は true です。Perl は同じセマンティクスを使用しているだけです。
Perl には C よりもスカラーまたはブール コンテキストで使用できるもの (特に文字列) が多いという事実は、Perl に複数のfalse 値があることを意味します。
整数0
を false にすることは、C プログラマにとって完全に理にかなっています。空の文字列""
を false にすることも理にかなっています。Perl は同じスカラーを数値または文字列として扱うことができるため、文字列を"0"
false にすることはほぼ避けられませんでした。
例えば:
$x = 2;
$x -= 2;
print "x = $x\n"; # prints "x = 0"
if ($x) {
print "A C programmer would be surprised to see this\n";
}
$x = "";
$x .= chr(48);
# Now $x eq "0", a string value that was built without reference to
# the number zero -- but it's nearly the same thing as the number 0.
print "\$x = $x\n"; # pritn "x = 0"
if ($x) {
print "A C programmer would be equally surprised to see this\n";
}
Perl が他の言語からそれほど多くの機能を借用することなくゼロから設計されていた場合、文字列と数値をスカラーとしてグループ化するのではなく、より強力に区別していた可能性があります。このような架空の Perl に似た言語を考えると、空の文字列と数値0
は false になる可能性が非常に高くなりますが、文字列は true になり、数値から文字列"0"
に変換するには明示的な変換が必要になります。0
"0"
でもPerlはそのまま。