プロが教えるわが家の防犯対策術!

お世話になります。

PerlのBBSを改造中です。
きちんと勉強してはいませんが、なんとなく弄ることは出来るレベルです。

今、ifで、表示の変更をしているのですが、上手く行かなくて困っています。

お分かりになる方、
何らかの原因に心当たりのある方、
どうぞよろしくお願いします。


★━━━━━━━━━━━━━━━━━━━━★


データを入れているdatファイル内、
$astrologyというのに、「*Leo*」というのが格納されています。

…で、

if(!$astrology){print "入ってない\n";}
else{print "入ってる\n";}

…と入れると、「*Leo*」というデータが入っているわけなので、
「入ってる」と、表示されます。

ですが、

if($astrology == "*Aries*"){print "おひつじ座 <br />$astrology \n";}
elsif($astrology == "*Leo*"){print "しし座 <br />$astrology\n";}
else{print "その他<br />$astrology\n";}


・・・と、書いてみると

「おひつじ座
*Leo*」

と表示されます。
「*Leo*」と表示されているので、呼び込めていない訳ではないと思うのですが…。


★━━━━━━━━━━━━━━━━━━━━★


何が原因かわからないので、ちょっとしたアドバイスでも構いません。
ご返答よろしくお願いします。

A 回答 (3件)

    • good
    • 0

初心者がよくやるんですが、文字列の比較演算子はeqです。



if($astrology eq "*Aries*"){print "おひつじ座 <br />$astrology \n";}
elsif($astrology eq "*Leo*"){print "しし座 <br />$astrology\n";}
else{print "その他<br />$astrology\n";}

==は数値比較で、数字同士を比較するときに使います。
if($flag==1){ print "true\n"; }
else{ print "false\n"; }
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます!

あっ!そうだったんですねっ!(≧ヘ≦ )
助かりました。教えて頂いた通りに「eq」で書いてやると、希望の形で表示されました!

どうもありがとうございます!

お礼日時:2011/12/26 02:24

> きちんと勉強してはいませんが、なんとなく弄ることは出来るレベルです



なら、もう少しだけきちんと勉強しましょう。
改造するにしても、基本くらいは覚えておかないと。


> if(!$astrology){print "入ってない\n";}
> else{print "入ってる\n";}
> …と入れると、「*Leo*」というデータが入っているわけなので、
>「入ってる」と、表示されます。

おそらく、ここに書くときに「入ってる」「入ってない」が逆になっています。


> if($astrology == "*Aries*"){print "おひつじ座 <br />$astrology \n";}
> elsif($astrology == "*Leo*"){print "しし座 <br />$astrology\n";}
> else{print "その他<br />$astrology\n";}

比較するときには、何を比較するかを頭に置いて、適切な演算子を使ってください。
== は「数値の比較」です。「文字列の比較」には eq を使います。
==を使うと、文字列を数値と見做して比較します。 "*Leo*", "*Aries*" はいずれも数値を表わす文字列にはなっていないので、 数値 0 と見做します。
if($astrology == "*Aries*"){print "おひつじ座 <br />$astrology \n";}

if(0 == 0){print "おひつじ座 <br />$astrology \n";}

他の演算子でも、文字列と数値とで使い分けるものがあります。
比較: < <= >= > と lt le ge gt
足し算/連結: + と .

言語によっては、文字列も数値も同じ演算子を使うものもあります
混同しないようにしましょう。
# 言語によっては "abc" + "def" → "abcdef" になるものがあります。
# perl では "abc" + "def" → 0 + 0 → 0 です。
    • good
    • 0
この回答へのお礼

ご返答ありがとうございます!

詳しくご説明頂き、ありがとうございます。
混乱してる事も、色々ありました;
時間が開いたら、勉強してみようと思います。

お礼日時:2011/12/26 02:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!