人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Perlでのことですが、

my $content = "a";

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

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

●質問者: the_yakisoba
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Perl print
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● tombe
●27ポイント

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


2 ● cubick
●26ポイント

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

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


3 ● BlackSabbath
●27ポイント

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

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

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

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

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

"a" も 0 になります。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ