WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGI perl 繰り返し処理で

0:[投稿] 樹里 [2003/01/06 23:26 ][環境:IE6 perl]

はじめまして 樹里と申します。
perl を はじめたばかりですが 掲示板を 改造してみています。
新たに欲しい機能が あるので 足したいです。
いろいろと 考えたり 試したり 探したり しましたが
ひとつ 解らない事が 出てきました。 よろしくお願いします。

foreach の { } 内で $a[0]
これは @a('…','…') から 来た物が 入りますよね??
これを <select><option> の 中に 入れました。
ここで 選ばれたものが cookie に 送られてます。
送られた物が aa0 と します。
もし 選ばれた物が aa0 なら aa0 が 表示されますが
aa0 ならそれ用の 文字色 と 背景色で
aa1 なら それ用の 文字,背景色で 表示されるようにしたいので

if elsif … else で
if    aa0 なら 背景 bb0 で 文字 cc0 で 表示。
elsif aa1 なら bb1…cc1
…else aa9 bb9 cc9
と 何度も elsif を 使って 書きました。
結果。 今 思ったように 動いています。

aa? を 増やす事が 後に 出てきます。
その時は また elsif を 追加して 書くのだろう。 と 思いました。
これは とても 効率が悪く感じて
aa'x' なら bb'x' と cc'x' で。
を 繰り返して 処理してくれるものを 探しました。
until とか do とか で 'x'++ を して やってみましたが 思うように 出来ませんでした。

下手な説明で ごめんなさい。 よろしくお願いします。


1:[回答] 薫 [2003/01/07 09:12 ]

ちょっと質問が読み取りきれてないかもですが、

@a = ('a0','a1','a2');
%moji = ('a0' => 'red', 'a1' => 'blue', 'a2' => 'green');
%back = ('a0' => 'white', 'a1' => 'yellow', 'a2' => 'purple');

foreach .....{
...処理...
$bgcolor = $back{$a[0]};
$text = $moji{$a[0]};
}

こういう事でしょうか?
しかし、@aを使わずにすむのなら

@moji = ('red','blue','green');
@back = ('white','yellow','purple');

foreach .....{
$i = '$a[0]の代わりの何らかの数字';
...処理...
$bgcolor = $back[$i];
$text = $moji[$i];
}

の方が単純そうです。


2:[お知らせ] 樹里 [2003/01/07 22:12 ]

薫様 返信 ありがとう御座います。
質問が 解り難かったですね…。
私も 読み返して そぉ感じました。 ごめんなさい。

現在 と したい状態 を 書いた方が 良いでしょうか??
一応 書きます。

@a1('エックス','ワイ','ゼット') ← <select><option> での 表示名。
@a2('xxx','yyy','zzz') ← cookie にも 送られる 選ばれたもの。
@a3( 背景色 ) ← 下では $bg_c
@a4( 文字色 ) ← 下では $font

$in{} と a は cookie から来た xxx とかです。

if ($in{'a'} eq $a1[0])
{ $bg_c = $a3[0]; $font = $a4[0]; }
elsif ($in{'a'} eq $a1[1])
{ … … …
else …

これじゃ 増えるたび 毎回書かなきゃ 駄目か…。
を if elsif … else じゃなく
変えなくて 済むように。 したいです。

返信して いただいた 内容は… ごめんなさい…。
処理 の 部分が わからないって 質問だったので…。
出来れば そこの ...処理... の 部分の 検索方法でも 教えていただけますか???
よろしくお願いします。


3:[回答] gun [2003/01/08 00:04 ]

こういうことですか?

for ($i=0;$i<=$#a1;$i++) {
    if ($in{'a'} eq $a1[$i]) {
        $bg_c = $a3[$i];
        $font = $a4[$i];
        last;
    }
}


4:[質問] 樹里 [URL] [2003/01/08 21:20 ]

そういうことでした。
出来ました。 gunさん ありがとうございます。
改めて 質問なのですが…。
一度 回答に 似た事を 試したのですが
その時は last; を つけてませんでした。
それは なんでしょうか??
また その類のものは 他にも あるのでしょうか??
調べ方 でも良いので 教えてください。


5:[回答] やじうま1号 [2003/01/08 21:33 ]

last; … 現在のループから一気にラベルの位置に抜け出します。ラベル省略時は、ループがネストになっている場合一気に抜け出すわけではなく、現在のループのすぐ外側に抜け出します。通常if文やunless文と組み合わせて利用されますが、if文などのブロックは無視されます。
『CGI&Perlポケットリファレンス』より


6:[回答] gun [2003/01/09 09:13 ]

>>4

私が関数などを調べるのに使っているのは、
<とほほのWWW入門>
http://tohoho.wakusei.ne.jp/www.htm


7:[関連] 薫 [2003/01/09 15:52 ]

その節は回答が不十分だったようで失礼しました

自分は此処をよく参考にしています
# バージョン4なのだけがネックですが...
http://flex.ee.uec.ac.jp/texi/perl/perl_toc.html


8:[完了] 樹里 [2003/01/09 21:09 ]

薫様 gun様 やじうま1号様 と この場を提供くださる管理者様
本当に ありがとうございました。

別の問題が 生まれてしまいましたが また 考えてみます。
教えていただいた サイト等 参考に させていただきます。
また 私では解決できない事が ありましたら よろしくお願いします。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World