※ ChatGPTを利用し、要約された質問です(原文:配列の中身がイコールならばとしたいです。)
配列の中身がイコールならば
このQ&Aのポイント
フォームを使って色を三色選んでもらい、選んだ3つがイコールの場合に「貴方は素敵ですね」と表示されるようにしたい
現在の実装では、どの色を選んでも必ず「貴方は素敵ですね」と表示される
配列をeq演算子で比較しているため、選んだ3つの色がイコールになっていないことが原因と考えられる
こんばんわ。ホームページのフォームを使って色を三色選んでもらい、それに対して貴方はこんな方ですね、としたいのですが、
好きな色3色選んでください。
<form method="post" action="hoge.cgi">
<input type="checkbox" name="q1" value="赤">赤
<input type="checkbox" name="q1" value="青">青
<input type="checkbox" name="q1" value="黄">黄色
<input type="checkbox" name="q1" value="紫">紫
<input type="checkbox" name="q1" value="黒">黒
<input type="checkbox" name="q1" value="白">白
<input type="checkbox" name="q1" value="ピンク">ピンク
<input type="checkbox" name="q1" value="緑">緑
<br>
<br>
<input type="submit" value="結果を見る!!">
<input type="reset" value="取消"></form>
とフォームから3つ選んでもらい、送信します。
そして、perlで記述したCGIで、
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'});
$buffer .= $ENV{'QUERY_STRING'};
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name,$value) = split(/=/,$pair);
$out{$name} = $value;
$value =~ tr/+/ /;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
if ($name eq "q1") {
push (@check1,$value);
}
}
print "Content-Type: text/html; charset=Shift_JIS\n\n";
print "<html>\n";
print "<head><title>$title</title></head>\n";
print "<body>\n";
#配列の数個を数える。3個以外はプログラムを中止。
$num = $#check1;
if ($num ne 2){
print "3個選んでね。";
exit;
}
#もし配列の中身が次の3つだったら、"貴方は素敵ですね"と答える。
if (@check1 eq "黄","紫","黒"){ print "貴方は素敵ですね。";}
#elsif (){;}
else { print "ごめんね。データがないよ。";}
print "</body>\n";
print "</html>\n";
exit;
と、したのですが、どの色を選んでも、貴方は素敵ですね。としか、表示されません。赤と紫と黒を選んでも、同じです。配列を eq としている時点でどうかと思いますが、選んだ3つがイコールの場合、貴方は素敵ですねと表示されるようにしたいです。自分でも調べていますが、よろしかったら是非お教えください。
でわ。
お礼
ありがとうございました。早速これに変えたところ、まったく正常に動きました。しかも、色の順番を入れ替えても、まったく正常に動きました!!まるで魔法のようです。早く勉強したいです。ありがとうございました。