• ベストアンサー

perlでの判定がうまくいきません

$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; }

質問者が選んだベストアンサー

  • ベストアンサー
  • shiren2
  • ベストアンサー率47% (139/295)
回答No.2

文字列を数値として比較しているので、そういった動作になります。 文字列として比較すれば望む通りの動作になると思います。 # if($tag =~ m/^tag$/ && $ref == 0){ if($tag =~ m/^tag$/ && $ref eq "0"){

noi_hh
質問者

お礼

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

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

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

noi_hh
質問者

お礼

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

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

noi_hh
質問者

お礼

回答いただきありがとうございます。 大変失礼いたしました。 コメントアウトのところに質問を記述させて頂きました。 宜しくお願い致します。 $| = 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; }

関連するQ&A