• ベストアンサー

perlですが疑問がでました

# 変数$aに1を代入せよ。 $a=1; # もし変数$aが1でなかったら A を表示せよ。 # もしくは変数$aが2でなかったら B を表示せよ。 # どれも真の場合は C を表示せよ。 unless($a==1){ print "A"; }elsif($a==2){ print "B"; }else{ print "C"; } とあって結果はCと出ます。私てきにはBが表示されるのかなと思ったのですが違いました。なぜCが表示されるのでしょうか。

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

  • ベストアンサー
  • Werner
  • ベストアンサー率53% (395/735)
回答No.1

elsifは条件が真の時にブロックが実行されます。 なので、そのコメントは間違いで、正しくは # 変数$aが1でなければ A を表示せよ。 # それ以外で、かつ変数$aが2であれば B を表示せよ。 # どの条件も満たされなければ C を表示せよ。 という感じでしょうか。 $a==2ならAが表示されてしまうので、Bが表示されることはないですね。

参考URL:
http://www.site-cooler.com/kwl/perl/6.htm#6-1

その他の回答 (2)

  • leap_day
  • ベストアンサー率60% (338/561)
回答No.3

こんにちは コメントとソースに矛盾が生じてますね 『1』でなければ『A』を、『2』であれば『B』を、それ以外なら『C』を、という風になっています ですので『1』の場合、『A』『B』の条件に合わないので『C』と表示されます また、elsif、elseを使うと先頭からマッチさせていくので『1』以外の数字・文字はすべて『A』となります 考え的には『2』なら『A』、『1』なら『B』、それ以外は『C』ということなのでしょうからそのようにプログラムすればいいです $a = 1; if($a eq "1") { print "B"; } elsif($a eq "2") { print "A"; } else { print "C"; }

  • metis
  • ベストアンサー率52% (86/165)
回答No.2

コメントが間違いの場合はすでに述べられていますので、一応プログラムが間違っている場合を挙げておきます。 残念ながら、unlessifという関数はありませんので、演算子を変更することになります。 「!=」と言う演算子は、左右が一致していないときに真を返す(「==」と逆)ので、これを使ってやります。 また、「どれも真」と言う表現が非常にあいまいです。 命題が「$aが1でない」「$aが2でない」と言うことであれば、この2つを同時に満たす場合にCを表示するので、多少厄介なことになります。 A,B,C全てが表示される数字もありえます(3とか)ので、この場合どう表示するかが大きな問題になってきます。 Cのみを表示させたいのであれば、Cの判定を最初に持ってきて残りをelseで纏める等の必要がありますし、該当するもの全て表示させたいのなら独立したCの判定が必要でしょう。 一方、命題が「$aが1」「$aが2」と言うことであれば、問題文のプログラムの形に近くなります。 …が、Cが表示されることがないので多分違うでしょう。

関連するQ&A