• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:繰り返し処理について)

繰り返し処理について

このQ&Aのポイント
  • カレンダーのCGIを作成した際、繰り返し処理で重くなってしまった構文を効率的に短くする方法を知りたいです。
  • 具体的には、$day1から$day31までの処理を繰り返す構文をシンプルにする方法について教えてください。
  • また、シンプルにした状態の構文の例も教えていただけると助かります。

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

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

たしかに何がやりたのか曖昧だが、予想して書くとこんな感じ? 表示がくずれるので全角空白を空白2文字にしていることに注意。 use strict; use warnings; my ( $day1, $day2, $day3 ) = qw(100 200 300); {   no strict qw(refs vars);   no warnings;   for my $count ( 1 .. 3 ) {     my $day_var  = eval '$day' . $count;     my $array_name = 'pl' . chr( ord('a') + $count - 1 );     @{$array_name} = cal($day_var);   }   print $_, q{, } for @pla;  # 100A, 100B, 100C,   print $/; } sub cal {   return ( $_[0] . 'A', $_[0] . 'B', $_[0] . 'C' ); }

disaster
質問者

お礼

 ご回答ありがとうございました。  no.4の回答者さんのご指摘により、この答えがベストだと知ることができました。  このような複雑な構文になってしまうとは思いませんでしたが、この文を理解し、自分で応用できるよう努力しようと思います。

disaster
質問者

補足

 回答ありがとうございます。  説明不足で申し訳ありません。  PERL言語で書いてます。  printについては最後にまとめておりますので、あくまで@pla ($plという書き方でもかまいません)の値を[1]から複数(仮に[10]まで)求めたい場合の、foreachなどの使い方が知りたくて質問させていただきました。  

その他の回答 (3)

  • ryu_chan
  • ベストアンサー率37% (69/186)
回答No.4

おそらく、No.3の_--_1l1_1_さんの回答が質問者さんが欲しい回答ではないかと思われます。 内容が少し高度?で、使い方がわからないのでは?と推測します。 かいつまんで書くと、No.3さんの回答は以下です(結果格納場所は配列にしてますが)。 my @pl; for my $count (1..31) { # 1~100ならここを1..100にする no strict 'refs'; my $day = eval '$day'.$count; push @pl, jd::Cal($day + 0.5); # ここが、$pl[0] = &jd'Cal($day1 + 0.5)に相当 } @plに欲しい情報が入っています(この場合、$pl[0]~$pl[30]に入ってます)。 jd::Cal(=&jd'Cal)の引数は、$day1 + 0.5というのを想定しています。

disaster
質問者

お礼

 ご指摘と詳しい解説をありがとうございました。  初心者なもので、C言語か何かと勘違いしておりました。

回答No.2

抽象すぎる CGIって言っても色々あるしPHPかPerlかRubyか あとどのように考えてそのソースにしたかの説明がないと有力な回答が得られにくいと思うけど

disaster
質問者

お礼

 ご指摘ありがとうございました。  CGIに様々な種類があることを知ることができました。

disaster
質問者

補足

 回答ありがとうございます。  言語はPerlを使用しています。  下の回答者様のところにも補足させていただきました。 $pl[1]=&cal($1); $pl[2]=&cal($2);  ・・・・と仮に$pl[100]まで値を求めたい場合、この書き方でいけば100行になってしまいますが、これをforeachなどを使えれば2~3行で済むのではないか?と考え、質問させていただきました。  ちなみにカレンダーに使うものですので、$1などにはユリウス日の数値が代入されており、$pl[1]などは60干支であったり、曜日であったりします。    どうぞ、よろしくおねがいします。

noname#131542
noname#131542
回答No.1

そのプログラムは知りませんが、どの言語にも繰り返し処理の命令はあるはずです。例えばvbとかで言えば、 dim i as integer 変数の宣言です   for i=1 to 10   iの値が1から1+1+1・・・でiの値が10になるまで      なんらかの処理   next i 基本的にc言語とか一緒です というような for nextなどあると思いますが

disaster
質問者

お礼

 ご回答ありがとうございました。  質問に対して全うな解答がついたとわかりましたので、1度回答を締め切ることにしました。  プログラミング言語には共通点も沢山あるのですね。  さまざまな書き方があるのだという事も知ることができましたし、勉強になりました。  

disaster
質問者

補足

 回答ありがとうございます。  プログラミングに関する知識がほとんどないため、説明不足でした。    言語はperlで、おそらくforeachを使うのだろうなと思うのですが、foreach(1,2,3){という123の部分の入力がいまいち理解できず、困っており、それで簡単な例をインターネット上でも探してみたのですが、いまだ理解できずという状況です。    やりたい事としては、最初の@plaなどは$pl[1]という書き方でも$pl1でもいいのですが、これが連番ですし、&jd'cal($day1 + 0.5)の部分も、&cal($1)でもOKです。      $pl[1]=&cal($1); $pl[2]=&cal($2);  ・・・・と仮に100まで$plの値を出す場合に、この書き方でいけば100行になってしまいますが、これをforeachなどを使えれば2~3行で済むのではないか?と考え、質問させていただきました。    どうぞ、よろしくおねがいします。