プロが教える店舗&オフィスのセキュリティ対策術

カレンダーのCGIを作成したのですが、下記のような構文を繰り返し処理で入力できずにおり、ファイルが重くなっています。
@pla = &jd'Cal($day1 + 0.5);
@plb = &jd'Cal($day2 + 0.5);
@plc = &jd'Cal($day3 + 0.5);
@pld = &jd'Cal($day4 + 0.5);
@ple = &jd'Cal($day5 + 0.5);
@plf = &jd'Cal($day6 + 0.5);
@plg = &jd'Cal($day7 + 0.5);
@plh = &jd'Cal($day8 + 0.5);
@pli = &jd'Cal($day9 + 0.5);
@plj = &jd'Cal($day10 + 0.5);
 この構文は省略していますが、実際は$day31まであります。
 
 まず知りたいのは、上の構文を繰り返し処理にて短くする方法です。
 短くした状態の構文も記入いただけるとありがたいです。
 どうぞ、よろしくおねがいします。
 
 

A 回答 (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というのを想定しています。
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/28 03:47

たしかに何がやりたのか曖昧だが、予想して書くとこんな感じ?


表示がくずれるので全角空白を空白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' );
}

この回答への補足

 回答ありがとうございます。
 説明不足で申し訳ありません。
 PERL言語で書いてます。

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

 

補足日時:2010/11/27 03:57
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/28 03:42

抽象すぎる


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

この回答への補足

 回答ありがとうございます。
 言語はPerlを使用しています。

 下の回答者様のところにも補足させていただきました。
$pl[1]=&cal($1);
$pl[2]=&cal($2);

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

補足日時:2010/11/27 03:48
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/28 03:50

そのプログラムは知りませんが、どの言語にも繰り返し処理の命令はあるはずです。

例えばvbとかで言えば、
dim i as integer 変数の宣言です
  for i=1 to 10   iの値が1から1+1+1・・・でiの値が10になるまで
     なんらかの処理
  next i
基本的にc言語とか一緒です
というような for nextなどあると思いますが

この回答への補足

 回答ありがとうございます。
 プログラミングに関する知識がほとんどないため、説明不足でした。
 
 言語は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行で済むのではないか?と考え、質問させていただきました。
 
 どうぞ、よろしくおねがいします。

補足日時:2010/11/27 03:39
    • good
    • 0
この回答へのお礼

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

お礼日時:2010/11/28 03:59

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!