my $content = "a";
if ($content == 0) {
print "majide?\n";
} else {
print "ok, content == 0\n";
}
この結果が「majide?」になる理由わかるかたいましたら教えてください。
Perlは型無し言語と言われていますが、正確には変数には型は無いものの、演算子には型があります。
例えば '==' は数値型演算子で、'eq'は文字型演算子です。
Perlのドキュメントには、演算子が型によって明確に分類されています。
http://www.oreilly.co.jp/books/4873110963/
http://www.oreilly.co.jp/books/4900900974/
'=='の場合、演算子の型は数値なので、Perlは2項の被演算子を数値として解釈しようとします。
被演算子の値が普通に '123' のような数字なら、そのまま 123 と解釈します。
'123abc' のような文字の場合、数値として解釈できる部分まで解釈して、123 と判断します。
従って
> my $content = "a";
この変数 $content を '$content == 0' という文脈で比較した場合、$contentの値は 0 と解釈されるので、比較結果は true となります。
演算子「==」で比較すると、両辺が数値であると解釈するので、これを使って文字列を比較すると、(その両辺の文字列が数値に変換しようがない場合)同じ値になってしまいif文が成立してしまいます。
つまり "a" == 0 が真になっているわけですが、
== は数値比較演算子なので左辺も数値に変換されます。
Perl は文字列の先頭から見て数字があれば数値にできるぶんは数値だと認識します。数値だと認識できない文字があればそこで変換は中止されます。
先頭から数値だと認識できない場合は 0 になります。
"1a" は 1 になりますが、"a1" は 0 です。
"a" も 0 になります。
コメント(0件)