「値の比較を効率よく行う方法を教えてください」で効率よい比較の方法を教えていただきましたものです。
早速試しているときに、おかしなことが・・・。
文字列が格納されている変数「$value」と「hogehoge」という文字列を比較しているのですが(本当は、もっと多く比較していますが、今は簡単にするために省略しました)、
$value eq 'hogehoge'
としたときにサーバーエラーになり、
$value == 'hogehoge'
としたときは、ちゃんと比較されて分岐もできています。
??といった感じなのですが、これで正常ですか?
私としては、「数値は==」「文字列はeq」でと思っていたものですから・・・。
ご教授よろしくお願いいたします。
No.3ベストアンサー
- 回答日時:
if($value eq 'ON')
が成立しない原因ですが、$valueの内容が'ON'でないと考えられます。例えば、'ON△'(△は半角のスペース)等に
なっていませんか。
「処理前に、printで保持している値をHTMLで吐き出して確認しました。」そうですが、空白が含まれていた場合、正しいように見える場合があります。
HTMLに吐き出す前に
$value =~ s/\s/X/g;
を実行してみては、いかがでしょうか。
もし、空白があれば、'ONX'のようになります。無ければ、'ON'が表示されるはずです。
ありがとうございました。
解決いたしました。
まさに、ご指摘の通りでした。
ちゃんと「ONX」と表示されてしまいました・・・。
ファイルから、読み込んだ際に改行コードを処理し忘れていました。以前自分で書いた別のものは、ちゃんと処理していたのに・・・。
chomp($value);
と入れることによって、期待している動作になりました。
今後のいい勉強になりました。
そんな基本的なことを忘れるなと、つこっまれそうですが以後忘れることのない様に、これからもPerl使い目指して励んでいきます。
また、わからないことがあると思いますが、そのときはよろしくお願いいたします。
本当にありがとうございました。
No.2
- 回答日時:
サーバーエラーになるということは、コンパイルエラーの可能性が高いです。
$value eq 'hogehoge'の「'」が正しく設定されていますか。(片方だけだとエラーになります)一方、$value == 'hogehoge'の場合、ちゃんと比較されて分岐もできていますということですが、数値として比較した場合、数値としての評価結果が同じであれば、成立します。$value に 'aaaa' が設定されている場合、
$value == 'hogehoge'
$value == 'aaaa'
$value == 'bbb'
は全て成立します。(数値として評価すると全て0になるため)
従って、ちゃんと比較されて分岐もできていることになります。
この回答への補足
BLUEPIXYさんに補足を書きましたが、tatsu99さんの説明でいけば「==」を使ったとき条件分岐で処理されるのは、当然ですね。
なぜ「eq」だとだめなんでしょう・・・。
他のサイトから無料のCGIを落として、試してみましたが、それではちゃんと「eq」で条件分岐できているようです。
一応、ソースをじっくり見たのですが、「'」や「;」など落としそうなものはチェックしましたし、なぜかサーバーエラーもなくなったし・・・。
不明です。
No.1
- 回答日時:
>「数値は==」「文字列は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されています。
エラーメッセージが出なくなったことに関しては、不明です。前回の書き込みをしたときから、ソースは一切いじってません。
なぞです・・・。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) エクセルで2つの表を比較して、文字列が同じだが、その行のある値が違うものを抽出したい 1 2022/10/06 21:48
- その他(プログラミング・Web制作) awkの文字列比較はPOSIXロケールまたはCロケールにおいてバイナリ値の比較に使えるか gawkな 1 2023/04/22 09:21
- Visual Basic(VBA) セルの値を比較してセルの値の色を変更するには 4 2022/05/22 20:28
- Visual Basic(VBA) 比較して等しくなかったらセルを赤くする 4 2022/07/19 20:11
- Excel(エクセル) エクセルの日付から年末尾2桁と月を1月をA~Lに変換したい 3 2022/08/08 10:32
- C言語・C++・C# いまc言語の標準ライブラリ文字列を勉強しているのですがいまいちわかりません。 strcmpとmemc 5 2023/07/04 15:34
- Visual Basic(VBA) VBA 改行コードの取り方 1 2022/03/22 14:14
- Visual Basic(VBA) 違う文字のみ色を塗る方法がわかりません。。 G列とH列のに文字が入っています。 例えばG5とH5の文 3 2022/06/03 17:13
- その他(教育・科学・学問) 【数学】数学に精通している方、博識な方にに質問です。 3 2022/08/12 15:55
- 会社経営 営業利益が赤字の中小企業って今後危ないですか? 調べている企業の直近の営業利益、経常利益、純利益が赤 2 2023/07/19 14:17
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Strawberry Perl for Windows ...
-
PerlでUTF-8のファイルの文字列...
-
Perlのエラーについてご教授く...
-
画像が表示でnull; this.src
-
Perlで特定文字列から特定文字...
-
INDIRECT 横に再度抽出したい
-
Wallpaper Engineでおすすめの...
-
perlで2次元配列をサブルーチ...
-
アルファベットに付いて質問し...
-
AI sisterとは、偽物の人ですか?
-
bashスクリプト
-
Perlで時間の計算
-
ペプシコーラとコカ・コーラとD...
-
Perl の外部モジュールの利用方法
-
PERL
-
Perlでファイルの末尾から指定...
-
vlookupがうまくいきません、教...
-
#!/usr/bin/perlで書きだしたCG...
-
perlのflock関数でロックをかけ...
-
ファイルアイコンの左下に緑の□...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語でしりとりのプログラムを...
-
emacsで辞書補完
-
禁止ワードに設定できない文字
-
表記のゆれを吸収する方法
-
CGI.pmによるプルダウンメニ...
-
検索でヒットさせたくない
-
python の 連鎖代入の文法
-
VBAでダブルコーテーション入り...
-
フォームを開くときに、コンボ...
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
excelの、ある数式内の{}の意...
-
テキストボックスの値を変数に...
-
配列の値を置換するにはどうす...
-
エクセルへのデータの貼付時に...
-
EXCEL/VBA 変数の値をクリップ...
-
エラーの意味は? Lvalue req...
-
Variant型で宣言してるのにEmpt...
-
vbsでテキストファイル内の文字...
-
[VBS]変数を定数に変換する方法...
おすすめ情報