買い物かご 掲示板 メール DB 利用規定 FAQ サポートBBS


次(連想配列)
前(送信データの表示)
必要なツール
最低限必要な知識
Make CGI Top
Basic

Home



配列 --最低限必要な知識--


基礎

配列や連想配列は、PerlやCGIの解説本にいっとう最初に出てくる「基本」事項です。これがわからないと、プログラムなんかできるはずがない!とばかりに、こと細かく説明しています。厳密な意味については、それらの解説本にお任せします^^;

実は、私が配列だの連想配列だのの正確な使い方を知ったときには、すでに、仕事で使うスクリプトをいくつか作成した後でした。
(このサイトで配布しているスクリプトではそんなことはありませんのでご安心を!)

なんて言うと・・・サァァァと血の気の引く人が何人かいらっしゃるかもしれませんが・・・
でもご安心ください。 後で確認したところ、致命的なバグはありませんでした。

要するに!

専門知識なんかなくても、大体こんな意味だろうな!と判断して、動いたら、OK!後で調べたら自分の思っていたとおりだった・・・。そんなものです。物事は!

以上!


え?ふざけるな?怒られてしまいました・・・(;;)

では、OGIPOGI流の「配列」講座を開始します。


配列

理屈から学ぼうとすると8割がた挫折する!

これは、私の持論であり、経験則です。その証拠に、現在「JavaScript」を挫折中です。

そこで、いきなり、配列を使った役立つソースを公開します。


@color = ('red','green','yellow','black');

print "Content-type: text/html\n\n";
print "<html><head><title>$main_title</title></head>\n";
print "$body\n";
print "<form method=POST action=test3.cgi>\n";
print "好きな色を選択してください\n";

foreach $_ ( @color ) {

print "<font color=$_>■</font><input type=radio name=color value=$_>\n";

}

print "</form>\n";
print "</body></html>\n";


「Perl Editor」初期設定を記述した後、上記のソースコードを貼りつけて、ブラウザで表示してみてください。

厳密には、初期設定はいらないのですが、必要な個所と不要な個所の説明をまだしていないので、わからない人は初期設定をそのまま貼りつけてください。余計なソースがあっても、スクリプトが動かなくなることはありません。

好きな色を選択してください

成功すれば、こんなのが表示されるでしょう。

ここで、ブラウザに表示されたページのHTMLタグを見てみましょう。

<form method=POST action=test3.cgi>
好きな色を選択してください
<font color=red>■</font><input type=radio name=color value=red>
<font color=green>■</font><input type=radio name=color value=green>
<font color=yellow>■</font><input type=radio name=color value=yellow>
<font color=black>■</font><input type=radio name=color value=black>
</form>

となっているでしょう? (改行位置は上記と異なります)

スクリプトのソースコード @color = ('red','green','yellow','black');

で、red green yellow black を別の色に変更して、再読み込みしてみましょう。色が変わると思います。

さらに、色を追加することもできます。

@color = ('red','green','yellow','black','追加する色');

色名(#で始まる英数をいれてもOK)を'(シングルクォーテーション)で囲みます。
色名と色名の間は,(カンマ)で区切ります。実際に試してみましょう。

上記のCGIスクリプトは、配列を使って、ユーザーに好きな色を選択させるようにしています。もちろん、ここで選択した色を掲示板なり、チャットなりで反映させるのですが、それはまた別の処理です。ここでは、配列の意味を理解するための素材としてよく使われるコードを用意しただけです。


このように、配列とは、複数の要素の集まりのことです。
(あ、急に難しくなった・・・)

  • @colorの@は「これは配列だぞぉ」とParlに教えるための記号です。

  • @の次の文字(半角を使うこと)が配列の名前です。一つのスクリプト内で重複する配列名を使わないように。配列名を忘れたときは、「Perl Editor」の変数エクスプローラで確認すること。

  • =('中身1','中身2','中身3');で、配列の中にいれる文字や数字を指定します。

  • 「(」「'」「)」「;」を忘れないように。忘れるとサーバーエラーで動いてくれません。



サンプルスクリプトで、もう一箇所「@color」を使っている場所がありますね。

ここでは「foreach」構文を使ってます。

この構文は、配列から一つずつ値(ここでは、「red」「green」「yellow」「black」)を取り出して、変数「$_」へ代入して、「{」と「}」にはさまれた個所に記述した文に反映させています。

値がなくなったらそれで終わり。次の文へ進みます。
サンプルスクリプトでは、print "</form>\n"; で</form>タグを生成します。

「$_」は「デフォルト変数」といって、変数にいちいち名前をつけるのはめんどくさいというものぐさプログラマのための変数です。ひどいときは、「$_」さえも省略されて、

foreach ( @color ) {・・・・}

なんて書く人も多いです。(私もたまに使ってます)

print "<font color=$_>■</font><input type=radio name=color value=$_>\n";

はただの「print」文なんですが、さっき代入した「$_」をタグに書きこんでます。

「$_」には何が入ってるんでしょうか?ブラウザで見たタグと見比べてみましょう。

「foreach」構文は、一つずつ値を取りだし・・・

と書きましたね。ということは・・・ご名答!

@colorにいれておいた「red」「green」「yellow」「black」を一つずつ「$_」にいれて、print文でHTMLタグを生成しているんです。

だから、この構文は・・・print文を使って、

<font color=red>■</font><input type=radio name=color value=red>
<font color=green>■</font><input type=radio name=color value=green>
<font color=yellow>■</font><input type=radio name=color value=yellow>
<font color=black>■</font><input type=radio name=color value=black>

を出力しているんですね。

配布用スクリプトでユーザーに色を自由に選択させたいときなんかによく使われます。自分だけで使うスクリプトでも、その日の気分で色を変えたいときなんかに便利です。

人によって「for」とか「while」を使う人がいます。
というか・・・ここで「foreach」を使うことは珍しいのかも・・・

でも、最も説明しやすいので、今回は「foreach」を使いました。


一気に、「foreach」関数まで説明しちゃいました。ここで意味が理解できなくても、一向に構いません。だって、一つの便利なソースコードが手に入ったんだから、それで良しとしましょう。

 


配列活用法

@color = ('red','green','yellow','black');

という配列があります。さて、ここで問題です。3番目の色を表示するにはどうしたらいいのでしょうか?

正解は・・・

$color[2]

です。おしかったですね。って言うか・・・知らなかったと思います。

え?3番目だから3じゃないの?

違うんです。Perlでは(他のプログラミング言語もそうですが)数字は全て0から数えるんですね。だから3番目は「2」です。

@ではなく$であることにも注意!
構文はこのまま覚えてしまいましょう。
なぜ?なんて考えると、そこで止まっちゃいます。

前回のソースを貼りつけたスクリプトに$color[2]と記述して確かめましょう。
「yellow」と表示されます。


このように、配列では、配列に代入した文字列たち(これをリストといいます)を順番を指定して取り出したりできます。

  • 3番目を出せとか、
  • 一番最後を出せ($#colorと書きます)とか、
  • 配列にいくつの要素があるのか($kosu = @color; で$kosuに4という数字が代入されます)とか、

結構便利に使えます。


Web寺子屋 OGIPOGI E-mail:info@web-terakoya.net
Copyright© 2000-2001 OGIPOGI All Rights Reserved.