• ベストアンサー

if 文  わかんない・・・

都道府県セレクトoptionフォームにて 都道府県を選択しない場合のエラーを なんとか2行で出せるようになったのですが 選択して下さい = value="0" if ($in{'pre'} eq '0') { &error("都道府県の選択!!"); } if ($in{'pre'} eq "") { &error("都道府県の選択!!"); } これを1行にするにはどうしたらいいのでしょう? ↓↓はダメでした(≧m≦) if ($in{'pre'} eq "" || '0') { &error("都道府県を選択!!"); }

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

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

unless は if の逆で「与えられた条件が成り立たないときにブロックを実行する」という文です. 今条件として $in{pre} とだけ書いてありますが, これだと「空文字列か (数値の) 0, あるいは (文字列の) "0" のときに偽, その他のときに真」となります. つまり, unless ($in{pre}) と書くと結果的に 「$in{pre} が空文字列か数値の 0, もしくは文字列の "0" のときに以下のブロックを実行する」という意味になります.

takumana20
質問者

お礼

2度も(補足にまで)回答いただきありがとうございました。 これから色々つかっていきます!

その他の回答 (3)

  • snowize
  • ベストアンサー率27% (68/245)
回答No.3

if ($in{'pre'} eq "" || '0') { …… } これについてちょっと丁寧に説明しますと、インタプリタの解釈としては、 $in{'pre'} は "" か '0' とイコール(eq)か? ではなく、 $in{'pre'} は "" とイコール(eq)もしくは '0' か? という解釈になってしまうんですね。 ちょっとPerlから離れて久しいので「'0'は長さのある文字列と見なされてtrue」となるのか「'0'は数値0と見なされてfalse」となるのかは忘れてしまいましたが、どっちにしろ定数値となってしまうってわけです。 ちょっと詳しい本ならば||や&&の使い方で詳しく説明されていると思うので、もう一度確認しなおすか、もしくは今後の課題としてメモしておくといいと思いますよ。

takumana20
質問者

お礼

意味もわかりました。ありがとうございました。

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

あっさり unless ($in{'pre'}) { &error("都道府県の選択!!"); } とか.

takumana20
質問者

補足

OKでしたけど unless は value="" value="0" だけに適用になるって事なのですか? セレクトoptionですけど 空欄が       "" 選択して下さいが "0"  都道府県が    "1"-"47"

回答No.1

未検証 if (($in{'pre'} eq "") || ($in{'pre'} eq '0') ) { &error("都道府県を選択!!"); }

takumana20
質問者

お礼

素早い回答ありがとうございました。

takumana20
質問者

補足

できました!!!! ちなみに ""とか''で区切っちゃいましたけど どっちでもいいですか?

関連するQ&A