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

「値の比較を効率よく行う方法を教えてください」で効率よい比較の方法を教えていただきましたものです。
早速試しているときに、おかしなことが・・・。

文字列が格納されている変数「$value」と「hogehoge」という文字列を比較しているのですが(本当は、もっと多く比較していますが、今は簡単にするために省略しました)、

$value eq 'hogehoge'

としたときにサーバーエラーになり、

$value == 'hogehoge'

としたときは、ちゃんと比較されて分岐もできています。
??といった感じなのですが、これで正常ですか?
私としては、「数値は==」「文字列はeq」でと思っていたものですから・・・。

ご教授よろしくお願いいたします。

A 回答 (3件)

if($value eq 'ON')


が成立しない原因ですが、$valueの内容が'ON'でないと考えられます。例えば、'ON△'(△は半角のスペース)等に
なっていませんか。
「処理前に、printで保持している値をHTMLで吐き出して確認しました。」そうですが、空白が含まれていた場合、正しいように見える場合があります。
HTMLに吐き出す前に
$value =~ s/\s/X/g;
を実行してみては、いかがでしょうか。
もし、空白があれば、'ONX'のようになります。無ければ、'ON'が表示されるはずです。
    • good
    • 0
この回答へのお礼

ありがとうございました。
解決いたしました。

まさに、ご指摘の通りでした。
ちゃんと「ONX」と表示されてしまいました・・・。
ファイルから、読み込んだ際に改行コードを処理し忘れていました。以前自分で書いた別のものは、ちゃんと処理していたのに・・・。

chomp($value);

と入れることによって、期待している動作になりました。
今後のいい勉強になりました。

そんな基本的なことを忘れるなと、つこっまれそうですが以後忘れることのない様に、これからもPerl使い目指して励んでいきます。

また、わからないことがあると思いますが、そのときはよろしくお願いいたします。

本当にありがとうございました。

お礼日時:2005/01/28 00:12

サーバーエラーになるということは、コンパイルエラーの可能性が高いです。

$value eq 'hogehoge'の「'」が正しく設定されていますか。(片方だけだとエラーになります)
一方、$value == 'hogehoge'の場合、ちゃんと比較されて分岐もできていますということですが、数値として比較した場合、数値としての評価結果が同じであれば、成立します。$value に 'aaaa' が設定されている場合、
$value == 'hogehoge'
$value == 'aaaa'
$value == 'bbb'
は全て成立します。(数値として評価すると全て0になるため)
従って、ちゃんと比較されて分岐もできていることになります。

この回答への補足

BLUEPIXYさんに補足を書きましたが、tatsu99さんの説明でいけば「==」を使ったとき条件分岐で処理されるのは、当然ですね。

なぜ「eq」だとだめなんでしょう・・・。
他のサイトから無料のCGIを落として、試してみましたが、それではちゃんと「eq」で条件分岐できているようです。

一応、ソースをじっくり見たのですが、「'」や「;」など落としそうなものはチェックしましたし、なぜかサーバーエラーもなくなったし・・・。
不明です。

補足日時:2005/01/27 21:05
    • good
    • 0

>「数値は==」「文字列はeq」


であってます。
実際の場面のコードと
エラーメッセージを補足して貰えますか

この回答への補足

今再度確認したところ、サーバエラーはなくなりました。
ただ、やはり条件分岐でおかしくなっています。
コードは、

if($value eq 'ON')
{
push(@account,"<br><br><input type=\"submit\" value=\"完了\" name=\"SUBMIT\"> \n");
}

としてます(前後は、はしょりました)。
このとき、$valueにはちゃんと ON が格納されていました。処理前に、printで保持している値をHTMLで吐き出して確認しました。
しかし、条件分岐はスルーされて、pushされません。

これが、

if($value == 'ON')
{
push(@account,"<br><br><input type=\"submit\" value=\"完了\" name=\"SUBMIT\"> \n");
}

だとちゃんとpushされています。

エラーメッセージが出なくなったことに関しては、不明です。前回の書き込みをしたときから、ソースは一切いじってません。

なぞです・・・。

補足日時:2005/01/27 20:56
    • good
    • 0

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