「これはヤバかったな」という遅刻エピソード

$ref == 0 が正常に判定されていないようです。なぜでしょうか?
また、if($tag =~ m/^tag$/ && $ref == 0){について、どのように改良するのが適切でしょうか?


$| = 1;
my $tag = "tag";
my $ref = "test";
if($ref eq ""){$ref = "0";}
$ref =~ s/%([a-f\d]{2})/pack 'H2',$1/egi;
if($tag =~ m/^tag$/ && $ref == 0){
print $ref;
}

A 回答 (3件)

文字列を数値として比較しているので、そういった動作になります。


文字列として比較すれば望む通りの動作になると思います。

# if($tag =~ m/^tag$/ && $ref == 0){
if($tag =~ m/^tag$/ && $ref eq "0"){
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
とても参考になりました!

お礼日時:2010/11/29 08:35

== は「数値として」比較します. 本当に「0」のときのみにしたいなら eq じゃいかんの?

    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
とても参考になりました!

お礼日時:2010/11/29 08:35

「正常に判定されていないようです. なぜでしょうか」


とか
「どのように改良するのが適切でしょうか」
と聞くなら, 何を期待しているのか書くのが当然ではありませんか?
ちなみに「$ref == 0」の部分は「正常」に判定されています. あなたが何をもって「正常」と考えているのかはわかりませんが....
    • good
    • 0
この回答へのお礼

回答いただきありがとうございます。
大変失礼いたしました。
コメントアウトのところに質問を記述させて頂きました。
宜しくお願い致します。

$| = 1;
my $tag = "tag";
my $ref = "test";
if($ref eq ""){$ref = "0";}
$ref =~ s/%([a-f\d]{2})/pack 'H2',$1/egi;
# ここで my $ref = "test"; $tag = "tag"; です。
# この場合、下記では、$ref == 0にマッチすることなく、print $ref;が実行されないことを期待していたのですが、実際に行うと実行されてしまいます。なぜでしょうか?
また、$ref=0の場合のみマッチさせたいのですが、どのようにすればよいでしょうか?
if($tag =~ m/^tag$/ && $ref == 0){
print $ref;
}

お礼日時:2010/11/28 23:43

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