タイトル

CGIの改造(中級編3)です。今回は配列です。
尚、私もあまりわかってないので、勉強しながら書いてます。。。


配列とは、簡単に言うと、ひとつの変数に複数の値をぶち込んだものと考えてください。
実際見たほうが早いですね。


@hairetu = ('a', 'b', 'c', 'd');

見ての通り、「@hairetu」の中には、「a,b,c,d」と言う4つの値が入ってます。
この値を取り出すときですが、


$hairetu[1]

というように、変数に「 [ ] 」を付けて、中に数字で指定してやります。
ここで注意ですが、配列は0から数えますので、上記の「$hairetu[1]」だと、 「b」と言う値をとります。

値の代入や表示の仕方は、


$xx[0] = 1;			→	0番目に数値1を代入
$xx[2] = 'cc';			→	2番目にccを代入
@xx = ( "11", "abc" );		→	配列xxに11,abcを代入
@xx[2..3] = ( "22", "ee" );		→	2〜3番目に22,eeを代入

print @xx;			→	配列の中身すべてを表示
print $xx[0];			→	0番目を表示
print @xx[0..2];			→	0〜2番目を表示

$#変数名 は、@変数名 の配列の最後の添え字(個数から1をひいたもの)を表わします。
@hairetu = ( "a", "b", "c", "d" );
print "$#hairetu\n";		→	3と表示されます。

このようにやります。
また、配列には操作するための関数がありますので、一応紹介します。


$x = shift(@xx);			→	@xxの最初の値を取り除いて、$xに格納する(@xxは最初の値を取り除いたものを返す)
$x = pop(@xx);			→	最後の値を取り除く(最後以外の値を返す)
unshift(@xx1, $xx);		→	配列@xx1の最初に値$xxを追加する
push(@xx1, $xx);			→	配列@xx1の最後に値$xxを追加する
push(@xx1, @xx2);			→	@xx1 の後ろに @xx2 の値を追加する
splice(@xx, 3, 2);			→	$xx[3..4](2個)を取り除く(取り除いた値以外の値を返す)
reverse(@xx);			→	@xxの値を逆順にしたものを返す
@x = split(/,/, $s);		→	文字列$sを","で分割してその配列を返す
foreach $i (@xx) {print "$i\n";}	→	すべての配列の値について処理を行う

ここで、配列を使ったひとつの例を見てみます。
曜日を代入するときに使った例です。


($sec,$min,$hour,$mday,$mon,$year,$wday) = localtime(time);
++$mon;
@youbi = ('日曜', '月曜', '火曜', '水曜', '木曜', '金曜', '土曜');
$data = "$man/$mday ($youbi[$wday])";

こうすると、前に紹介した「if ($wday == 0) {..」などとやらなくても楽です。

配列は使いどころが難しい(と言うか複雑と言うか・・・)ので、 いろいろと研究してみてください。
配列が使えるといろいろなことができます。がんばりましょう。
なんか今回は改造と言うより基礎知識みたいな感じだなぁ。。。


常識だと思いますが、CGIの改造は各自の責任においてやってください。
どんなことがあっても、私にふらないでください。

表紙に行く