- ベストアンサー
if 文 わかんない・・・
都道府県セレクトoptionフォームにて 都道府県を選択しない場合のエラーを なんとか2行で出せるようになったのですが 選択して下さい = value="0" if ($in{'pre'} eq '0') { &error("都道府県の選択!!"); } if ($in{'pre'} eq "") { &error("都道府県の選択!!"); } これを1行にするにはどうしたらいいのでしょう? ↓↓はダメでした(≧m≦) if ($in{'pre'} eq "" || '0') { &error("都道府県を選択!!"); }
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
unless は if の逆で「与えられた条件が成り立たないときにブロックを実行する」という文です. 今条件として $in{pre} とだけ書いてありますが, これだと「空文字列か (数値の) 0, あるいは (文字列の) "0" のときに偽, その他のときに真」となります. つまり, unless ($in{pre}) と書くと結果的に 「$in{pre} が空文字列か数値の 0, もしくは文字列の "0" のときに以下のブロックを実行する」という意味になります.
その他の回答 (3)
- snowize
- ベストアンサー率27% (68/245)
if ($in{'pre'} eq "" || '0') { …… } これについてちょっと丁寧に説明しますと、インタプリタの解釈としては、 $in{'pre'} は "" か '0' とイコール(eq)か? ではなく、 $in{'pre'} は "" とイコール(eq)もしくは '0' か? という解釈になってしまうんですね。 ちょっとPerlから離れて久しいので「'0'は長さのある文字列と見なされてtrue」となるのか「'0'は数値0と見なされてfalse」となるのかは忘れてしまいましたが、どっちにしろ定数値となってしまうってわけです。 ちょっと詳しい本ならば||や&&の使い方で詳しく説明されていると思うので、もう一度確認しなおすか、もしくは今後の課題としてメモしておくといいと思いますよ。
お礼
意味もわかりました。ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
あっさり unless ($in{'pre'}) { &error("都道府県の選択!!"); } とか.
補足
OKでしたけど unless は value="" value="0" だけに適用になるって事なのですか? セレクトoptionですけど 空欄が "" 選択して下さいが "0" 都道府県が "1"-"47"
- himajin100000
- ベストアンサー率54% (1660/3060)
未検証 if (($in{'pre'} eq "") || ($in{'pre'} eq '0') ) { &error("都道府県を選択!!"); }
お礼
素早い回答ありがとうございました。
補足
できました!!!! ちなみに ""とか''で区切っちゃいましたけど どっちでもいいですか?
お礼
2度も(補足にまで)回答いただきありがとうございました。 これから色々つかっていきます!