• ベストアンサー

IFのネストについて(PERL/CGI)

データファイルからHTMLへの吐き出しについての質問です。 CSVデータ用ファイルに 「1,0」(データNO,表示フラグ) 「2,1」 「3,1」 と並んでいて、そこから  (1)表示フラグが1のときのみ、HTMLの表の中にサブウィンドウが開くボタンを表示させたい  (2)表示フラグが0の時は何も表示させない というところまで出来ているものに  (3)データNOごとにサブウィンドウのサイズを変えたい ということを考えているのですが 現在(3)の盛り込み方が分からず、全て同サイズのサブウィンドウを表示させるだけになってしまっています。 そもそもPERLを全然分かっていないような状況で、前の製作者のソースを触っているので 単純なIF文でいけるのかと思い、  if($DATA[1] == 1){   print <<END;    【<a href="JavaScript:openwin(ボタン)</a>】   END  }else{   print<<END;   <br>   END  } というのを  if($DATA[1] == 1){   if($DATA[0] == 1 ){    print <<END;     【<a href="JavaScript:open_big(ボタン)</a>】→大きいサブウィンドウ    END   }elsif($DATA[0] == 3 ){    print <<END;     【<a href="JavaScript:open_little(ボタン)</a>】→小さいサブウィンドウ    END   }  }else{   print<<END;    <br>   END  } のように変えてみたら、エラーになりました。 たぶん、参考書でも初歩中の初歩みたいな質問かと思いますが、さっぱり分からないんです。。 回答例か、このレベルの質問でも答えてくれているサイトを教えてください。 よろしくおねがいします。

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

  • ベストアンサー
回答No.1

元のコードを忠実にコピーされましたでしょうか? (変更後のソースはもとより、前の製作者様のソースもです) 例えばココですが↓ ---------  }else{   print<<END;    <br>   END #↑ココ  } --------- ENDの前に空白が入っていますが、インデントを加えられました? 変更前のソースにも空白がはいっているのならば 今までもエラーが出ていたと思うのですが・・・。 ---------  }else{   print<<END;    <br> END #↑行頭から記述  } --------- if文の方は大丈夫な気はします。 見やすいようにインデントを加えられたのかもしれませんが、ヒアドキュメントの終端文字列(この場合はEND)は行頭から記述しないといけなかったと思います。

n0s
質問者

お礼

以下のように修正してみたんですが、どうもエラーになります。  if($DATA[1] == 1){   if($DATA[0] == 1 ){    print <<END;     【<a href="JavaScript:open_big(ボタン)</a>】→大きいサブウィンドウ END   }elsif($DATA[0] == 3 ){    print <<END;     【<a href="JavaScript:open_little(ボタン)</a>】→小さいサブウィンドウ END   }  }else{   print<<END;    <br> END  } 元の状態(↓)だと動くんですが。  if($DATA[1] == 1){    print <<END;     【<a href="JavaScript:open_big(ボタン)</a>】→大きいサブウィンドウ END   }  }else{   print<<END;    <br> END  } ちなみにelsifを外してもだめ、elseに変えてもだめでした。追加箇所がおかしいのは明らかなんですが $DATA[0]ってのが間違えてるんでしょうか。。。(でも他の場所では使用できているんですね) それともprintの場所?  ややお手上げぎみです。回答くださったのですがすみません。。

n0s
質問者

補足

あ、わざとインデントしてましたが、行頭からの記述という意識は実はありませんでした。 (前のソースはちゃんと行頭でした) そういう簡単なとこやったかもしれないですね。 ちょっと週末で作業環境から離れますが、週明けにいけてるかどうかお礼します。ありがとうございました。

その他の回答 (3)

  • Saka-Q
  • ベストアンサー率0% (0/2)
回答No.4

> すみません、単なる引用ミスです。 答える側にはここに記述されることしか情報無いのですから、引用は慎重に(現物からコピー&ペーストで)お願いしたいと。 > エラーは「500 internal server error」 > perlですと修正内容の直後の}else{ の行に「at end of line syntax error ....near > "}"」と出ています。 エラーメッセージは、出来れば最初から記載した方がいいかと思いますよ。 エラー500は構文エラー発生で、結果を返せないようなときに出るんでしたよね。 結局、開きカッコと閉じカッコの数が合ってないのではないですか? 最悪、プリントアウトして一組ずつカッコの対応を確認しましょう。きっと一個余るはずです。

n0s
質問者

お礼

回答遅くなりました。。。カッコの数を数えてもあっててあまりに単純な部分なんで、逆に分からなくなってました。 結局、解決はしていないままですが、も少し勉強してみます、ありがとうございました。

  • Saka-Q
  • ベストアンサー率0% (0/2)
回答No.3

sun_spinel様宛のお礼欄内容が気になるので確認させてください。 ---------- 元の状態(↓)だと動くんですが。 if($DATA[1] == 1){ print <<END; 【<a href="JavaScript:open_big(ボタン)</a>】→大きいサブウィンドウ END } }else{ print<<END; <br> END } ---------- この引用コードに間違いがないとして、上記で、elseの所を 「if($DATA[1] == 1){」に対するものとして扱われているのであれば、(どのようなエラーか分かりませんが)おそらく望まれる結果が得られないと思います。 if~の閉じ}は、else行の一行上のものだと思うんですが・・・。

n0s
質問者

補足

すみません、単なる引用ミスです。 if($DATA[1] == 1){ print <<END; 【<a href="JavaScript:open_big(ボタン)</a>】→大きいサブウィンドウ END }else{ print<<END; <br> END } →→→これが正しい元コードです。いろいろ試してみてもやはりうまくいかないです。 エラーは「500 internal server error」 perlですと修正内容の直後の}else{ の行に「at end of line syntax error ....near "}"」と出ています。

  • duckling
  • ベストアンサー率47% (88/185)
回答No.2

> どうもエラーになります。 エラーというのは、 シンタックスエラーですか? それとも「思った通りに動かない」という意味ですか? 前者なのだとしたら、 私がテストした限りではシンタックスエラーは出ません。 > $DATA[0]ってのが間違えてるんでしょうか 後者なのだとしたら、 $DATA がどういう構成になっているのかの情報が必要なので なんとも言えません。