Perl
steals
は、C、awk、Bourneシェルなど多数の言語の機能を継承しています。
Cでは、0の値はすべてfalseで、0以外の値はすべてtrueです。 Perlは同じセマンティクスを使用しています。
Cが行うよりもスカラーやブール値の文脈でPerlが使うことができる事実、特に文字列は、Perlが複数のの値を持つことを意味します。
整数を0
にすることは、Cプログラマにとって理にかなっています。空の文字列を""
にすることも意味があります。 Perlは同じスカラーを数値または文字列として扱うことができるので、文字列"0"
をfalseにすることはほとんど不可避でした。例えば
:Perlは他の言語から非常に多くの機能を借りずにゼロから設計されていた場合
$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のような言語を考えれば、おそらく空の文字列と数字0
は偽になりますが、文字列"0"
が真となります。数字0
から文字列"0"
に変換する必要があります。
しかし、Perlはそのままです。
言語はアプリケーションプログラムと似ていません。ストリング "0"の偽りが確立されると、機能していないプログラムの数を壊す危険なしに変更することはできません。 –
「0でも間違った」トリックもあります。 –