• ベストアンサー

CGIの書き方を教えてください。

すみませんが、能力不足のためうまくかけません。どうか答えを教えてもらえませんでしょうか? if ($in{'abc'} eq "A" or $in{'abc'} eq "B" or $in{'abc'} eq "C" ){&error("×");} これだと、A,B,Cの場合は×になりますが、A,B,C以外の場合に×にしたいのですが、書き方が分かりません。 neを使ってやろうと思ったのですが、うまく動きません。 怒られそうな内容なのですが、どうか広い心で教えてください。

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

  • ベストアンサー
  • steel_gray
  • ベストアンサー率66% (1052/1578)
回答No.2

Perlでしょうか? Perlならifをunlessに変えるとできます。 if(~ ↓ unless(~

Template
質問者

お礼

ありがとうございました。無事動作しました。これは見たことのない命令文です。もっとo( ゜Д゜)oブンブン勉強します。ありがとうございました。

その他の回答 (1)

noname#77845
noname#77845
回答No.1

if ($in{'abc'} ne "A" and $in{'abc'} ne "B" and $in{'abc'} ne "C" ){&error("。゜");} っていうこと?

Template
質問者

補足

説明が不十分ですみません。条件のうち一つでも合っていればOKというのを出したかったのです。回答2で答えが見つかりましたが、ありがとうございます。

関連するQ&A

  • 条件分岐での排他的な論理和について

    $aが 'abc' 'xyz' 以外の時に実行したい場合の条件分岐。 ついついこんな風に書いて間違えてしまいます。 if( $a ne 'abc' || $a ne 'xyz' ){...} 上記だと論理和左側のneが真を返すので、右側の条件を見てくれないから仕方なくunlessを使います。 unless( $a eq 'abc' || $a eq 'xyz' ){...} でも私、unlessが嫌いなんです。 if文で書く最も処理が高速でスマートな方法教えて下さい。 部分一致ではないので正規表現は使いたくありませんが 比較演算子を使うより正規表現を使ったほうが処理が高速な場合は正規表現も有りでお願いします。

    • ベストアンサー
    • Perl
  • 条件式の書き方について

    $aがaかbかcだった場合という条件式を if($a eq a || $a eq b || $a eq c) とせずに if($a eq aまたはbまたはc) というようにまとめて書くことは無理なんでしょうか?

    • ベストアンサー
    • Perl
  • Excelで0とエラーを非表示にしたい

    Excel97で、B1/A1という計算の答えをC1に表示させる場合についてです。 答えが0のときとエラーのときは空欄にしたいのですが、 下記のように入れてみましたが正しく表示されません。 (答えが0のときは空欄になるのですが、エラーは表示されてしまいます) =IF(OR(ISERROR(B1/A1),(B1/A1=0)),"",B1/A1) 正しいやり方をご存知の方、教えて下さい…

  • クイズのCGIの一部にあるプログラムの意味

    下記の「=~ /ハリソン/」、「eq '多寡'」、「=~ /^2\D*$/」のそれぞれの意味を教えてください。 ちなみに「ハリソン」、「多寡」、「/^2\D*$/(答えは2)」は答えです。 $r01 = $IN{'01'}; if($r01 =~ /ハリソン/){$gana++; push(@exito, '01'); } $r02 = $IN{'02'}; if($r02 =~ /^大隈/){$gana++; push(@exito, '02'); } $r03 = $IN{'03'}; if($r03 =~ /^湯川/){$gana++; push(@exito, '03'); } $r04 = $IN{'04'}; if($r04 eq '多寡'){$gana++; push(@exito, '04'); } $r05 = $IN{'05'}; if($r05 eq '日産'){$gana++; push(@exito, '05'); } $r06 = $IN{'06'}; if($r06 =~ /^バニラ/){$gana++; push(@exito, '06'); } $r07 = $IN{'07'}; if($r07 eq '碌' ){$gana++; push(@exito, '07'); } $r08 = $IN{'08'}; if($r08 =~ /中松/){$gana++; push(@exito, '08'); } $r09 = $IN{'09'}; if($r09 =~ /^2\D*$/){$gana++; push(@exito, '09'); } $r10 = $IN{'10'}; if($r10 eq 'アイルランド'){$gana++; push(@exito, '10'); }

    • 締切済み
    • CGI
  • A.cgiで認証チェックされてから、B.thmlが表示されるようにしたい。

    1/17付CGIについての質問の関連です。 質問はパスワード付forum.cgi(付録フリーCGI)で、forum.cgiを入室後、ID&PW情報をA.cgiに渡したまま、新しいHTMLウィンドウを立上げることでした。 この質問は、こちらの教えてGOOでご教授いただきました。ありがとうございます。 できたCGIでは、A.cgiでID&PWを入力しないでも、B.thmlが表示されてしまいます。 # ID/PW認証 # sub pass_check { local($time,$time2,$inpw,$flag,$id,$pw,$check); # 時間を取得 $time = 略; $timeout = 略; $password = '略'; $pwdfile = '略; #中略 if ($in{'id'} eq "") { &header; print "<table><tr><td>\n"; print "<td><form action=\"$script\" method=\"GET\"onsubmit=\"window.open('B.html,'new')\">\n"; print "<tr><th><UL><LI>すでにパスワード取得済みの方は・・・略 print "<tr><th>ログインID<th><input type=text name=id size=8></tr>\n"; #中略 print "<tr><th colspan=2><input type=submit value=' 認証する '></tr>\n"; #中略 if ($in{'pw'} eq "") { &error("パスワードの入力モレです"); } $flag=0; open(IN,"$pwdfile") || &error("Open Error : $pwdfile"); while (<IN>) { ($id, $pw) = split(/:/); if ($in{'id'} eq $id) { $flag=1; $pw=~s/\n//; last; } } close(IN); if (!$flag) {&error("該当のIDは見当たりません"); } $check = &decrypt("$in{'pw'}", "$pw"); if ($check ne "yes") { &error("パスワードが違います"); } # パスワードを第2暗号化 以下略 } 認証の送信をしたときに、エラー時エラーメッセージに飛ぶ(分岐する?)にはどういう記述にしたら良いでしょうか? 見にくいかもしれませんが、どんなヒントでも結構ですので宜しくお願いします。

    • 締切済み
    • CGI
  • if文がうまく書けない(T.T)

    某CGIを改造してます。 CGIにIDとPassを組み込もうとしているのですが、うまくできません。 いろいろな認証CGIを真似してやっているのですが… sub pass2{ open (FILE,"$passdata"); @file = <FILE>; close FILE; foreach (@file) { local($nm,$ps)= split(/,/,$_); if ($nm eq $in{'name'} && crypt($in{'password'},$ps) eq "$ps") { &admin; exit; } } &error("認証に失敗しました?"); } この状態だと動くことは動くのですが、ちょっと面倒なので逆転させたいんです。 そこで以下のように作り変えてみました。 if ($nm ne $in{'name'}) { &error("名前が違います"); exit; } if ($nm eq $in{'name'} && crypt($in{'password'},$ps) ne "$ps") { &error("パスワードが違います。"); exit; } } &admin } こうすると、なぜか正しい名前を入れても「名前が違います」のメッセージが出ます。 いったいどこが間違っているのですか? 言語はperlです。 お願いします。

    • ベストアンサー
    • CGI
  • if 文  わかんない・・・

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

    • ベストアンサー
    • Perl
  • excel初心者です。

    excel初心者です。 2つの条件式を1つにまとめたいのですが、エラーが起こってしまいます。 ご助言の程、よろしくお願いします。 =IF(OR(A1="",B1=""),"",B1-A1) =IF(OR(A1="",C1=""),"",C1-A1) =IF(OR(A1="",D1=""),"",D1-A1) 上記3つの式なのですが、やりたいことは、 A1かつ、B1またはC1またはD1に値が入った場合、それぞれに対応する計算を行う。 それ以外は、空欄とする。 という条件式です。 この3式を1つにまとめることは可能でしょうか? よろしくお願い致します。

  • A-1かB-1に~

    A-1かB-1に空白がある場合は空白を返し、そうでなければC-1+D-1といったような式を作りたいのですが、どうもできません。 自分で「=IF(OR(A1="",B1=""),"",C1+D1)」といった感じで作りましたが、答えが出ません。  どなたか分かる方教えてください。宜しくお願いします。

  • perl初心者です。宜しくお願い致します。

    ファイルの容量が大きく。perlを使用してデータの集計をしています。 "A"がきたらflag1をたてなさい。 "B"がきたらflag2をたてなさい。 "C"がきたらflag3をたてなさい。 これでAとBとCを抜き取ること&AからCまでの時間を取得したのですが、 Bの数のmaxの値だけを抜き取りたいのですが、Bがきたときの数をすべて 出力してしまいます。下記の文だと、Bが4回きたら、1,2,3,4と出力してしまいます。 それで4だけを出力したいのですがどのように書き換えたらようか教えて頂けますでしょうか。 '----------------------------------------------------------------------------- open (IN,"< $ARGV[0].txt") or die; open (OUT,"> $ARGV[0]_out.txt") or die; $flag =0; my $a, $b, $c; $count = 0; ####################################################### while($line =<IN>){ ($time,$data) = split(/\s+/,$line); if($data eq "A") { $flag=1; $a = $time; #print OUT $line; #print OUT "\n"; } elsif($data eq "B"){ $flag=2; $count++; $count == $data; print OUT ("$count\n") } #print OUT ("$count\n"); elsif($data eq "C"){ $flag=0; $count=0; $b = $time; $c = $b - $a; print OUT ("time $c\n") } } -------------------------------------------------------------------------------