Perlでのことですが、


my $content = "a";

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

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

回答の条件
  • 1人2回まで
  • 登録:2007/08/28 10:06:04
  • 終了:2007/09/04 10:10:03

回答(3件)

id:tombe No.1

tombe回答回数38ベストアンサー獲得回数72007/08/28 10:36:34

ポイント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

cubick回答回数125ベストアンサー獲得回数362007/08/28 10:38:56

ポイント26pt

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

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

id:BlackSabbath No.3

BlackSabbath回答回数53ベストアンサー獲得回数42007/08/28 10:38:54

ポイント27pt

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

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

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

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

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

"a" も 0 になります。

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

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

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

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

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません