Perlでのことですが、


my $content = "a";

if ($content == 0) {
print "majide?\n";
} else {
print "ok, content == 0\n";
}

この結果が「majide?」になる理由わかるかたいましたら教えてください。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2007/09/04 10:10:03
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

回答3件)

id:tombe No.1

回答回数38ベストアンサー獲得回数7

ポイント27pt

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 となります。

id:cubick No.2

回答回数129ベストアンサー獲得回数39

ポイント26pt

演算子「==」で比較すると、両辺が数値であると解釈するので、これを使って文字列を比較すると、(その両辺の文字列が数値に変換しようがない場合)同じ値になってしまいif文が成立してしまいます。

http://www.nishishi.com/blog/2005/11/operator_of_per.html

id:BlackSabbath No.3

回答回数53ベストアンサー獲得回数4

ポイント27pt

つまり "a" == 0 が真になっているわけですが、

== は数値比較演算子なので左辺も数値に変換されます。

Perl は文字列の先頭から見て数字があれば数値にできるぶんは数値だと認識します。数値だと認識できない文字があればそこで変換は中止されます。

先頭から数値だと認識できない場合は 0 になります。

"1a" は 1 になりますが、"a1" は 0 です。

"a" も 0 になります。

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません