電子書籍の厳選無料作品が豊富!

比較が上手く機能していません。
下のように書いていますが、全て緑になってしまいます。
(真の結果が採用されてしまいます。)

if ($trm14 eq "●") {print "<font color='green'>";}
else {print "<font color='red'>";}


全角は比較できないのでしょうか。
$trm14には間違いなく「●」が入っています。
入らない場合は""になっています。
$trm14はファイルの1項目です。


ちなみに、
以下のようにやればチャンと期待通りに機能します。
●の代わりに「8」を入れてみました。

if ($trm14 == 8) {print "<font color='green'>";}
else {print "<font color='red'>";}


宜しくお願いします。

A 回答 (3件)

れれ もう一度見直してみると



>if ($trm14 eq "●") {print "<font color='green'>";}
> else {print "<font color='red'>";}

>$trm14には間違いなく「●」が入っています

この場合「真」ですよね?
これ以外の場合に「偽」にしたいということですよね(かくに~んw)

#################################################
おっしゃるように、同じコードの中で

#例1
$trm = '●';
print 'OK' if ($trm eq '●');

として、実行すると

#例1実行結果
OK

と出力されるはずです。(ここ確かめてみてください)


上記を踏まえて
もしかして・・・ もしかしてですが

if ($trm14 eq "●")

の部分は、わかりやすくしたのではなくこのままの状態です?
というのも、このままだと「完全一致」ということになりますよね
もし文の中にある●をさがしたいのであれば「正規表現」でマッチさせないといけないです。

if ($trm14 =~ /●/)

だと、文中にある●をさがしてif文を真にさせることができます。
(もうしわけないどのていどのプログラミングレベルかわからないものでこちらもさぐりさぐりですw)

#例2
$trm = 'ははは●ははは';
print 'OK' if ($trm =~ /●/);

#例2実行結果
OK


#----------------------------------------------------
わたしの経験上、Perlでの文字コードは入力も出力もUTF-8に統一したほうがいいです。
というのもSHIFT-JISだと他のコードとかぶる部分があるのでうまくいかないときがありますし、
Perl自体UTF-8よりにできていると聞いたので今までそうしてきました。
ファイルを読み込む際にUTF-8に変換して、プログラムコード自体もUTF-8にすると混乱を避けることができます。
実際にエンコードを変換する方法は以下参照

http://www.rwds.net/kuroita/program/Perl_unicode …

Perlバージョン5位からは以前のように、jcode.plを使わなくとも文字コードの取り扱いが楽になってますよ。
それとプログラムを書く場合、メモ帳ではなく文字コードを指定できる「秀丸」などを使ったほうがいいです。

さらに!
CGIということなのでHTMLの文字コードタグも同じにしないといけませんよー


とりあえず、思いつく限りを羅列してみました。何かのヒントになればいいのですがいろいろな環境がありますので「これだ!」とは言い切れないのが・・・わたしも年食った証拠かな><;
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。
何回も有り難うございます。

色々教えていただきましたが、
ズバリの比較ではダメでした。
やはりtrm14が●と認識されていないみたいです。
正規表現に直してやってみたら、真偽の判定が出来ました。
ただ、●はtrm14にあるだけではないので、結論は使えません。

そして、
色々やった結果、上手く行きました。
実際のファイルで、trm14は最後の項目でした。
区切り符号に<>を使っており、trm14の後ろに<>が無かったので入れたら上手く判定できました。

今回教えていただいたことは別途復習しておきます。
大変お世話になりました。

お礼日時:2011/01/31 17:59

いちおう念の為ですが, 「文字の扱いが楽になった」のは Perl5.8 以降といっていいと思います>#2. 5.6 より前 (5.

003 とかの時代) ではあまり考えられていなかったし, 内部的に Unicode化した 5.6 も実際上はいろいろと問題があったはず.
    • good
    • 0
この回答へのお礼

情報有り難うございました。
お陰様で上手く行きました。

お礼日時:2011/01/31 18:01

おそらく 文字コードの問題ではないでしょうか?


$trm14とPerlプログラムのエンコードを同じにして比較すると、期待通りになると思いますよ。

試しにWindowsのコマンドプロンプトでやってみたところ、問題なく機能していました。

この回答への補足

お礼に書き忘れましたので、
ココに書かせて貰いました。

質問で
>$trm14には間違いなく「●」が入っています。
と書きましたが、どう調べたのかといいますと、

print "$trm14\n";とやって●が表示された、
ということです。

これだと同じcgi内でやっていることなので、
文字コードは同じと解釈されている、ということにはならないのでしょうか。
今ひとつ分かっていません。
宜しくお願いします。

補足日時:2011/01/30 05:54
    • good
    • 0
この回答へのお礼

早速有り難うございました。

まず、全くダメではないとのこと、
少しは希望がもてました。

して、エンコードを合わせる件ですが、
具体的にはどうすれば宜しいのでしょうか。

実際の動きは、
$trm14の項目を持つファイルは、excelから作り出しているテキストファイルです。
それをcgiで入力し、ある項目を表示する際に●が入っていれば緑、入っていなければ赤と
表示し分けたいというモノです。

cgiで表示するページの指定は、
<META http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
のようにしています。

これをexcel作業時のエンコードに合わせる、ということでしょうか。
(といってもどうすればよいか分かりません。)

お手数ですが、
具体的に教えていただければ嬉しいです。
宜しくお願いします。

お礼日時:2011/01/30 05:42

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