ぱかぽこお馬さんPumpkinNet
 わいわいコミュニケーションネットワーク 
PumpkinNet CGI工房へようこそ。
Perl基礎講座(3)


CGI工房ホーム
スクリプト講座ホーム
CGIってなに?

(Introduction)
Perlをゲットしよう!
基礎講座(1)
変数の扱い
基礎講座(2)
制御構造文 if
基礎講座(3)
変数の複数形(1)
基礎講座(4)
ループの処理
基礎講座(5)
変数の複数形(2)
Perl基礎講座(3)
変数の複数形(1) -配列について-

配列って?

基礎講座(1)にて、変数について解説しましたね?
変数はある1つの値を持つものでした。
配列(arrayと言います)というのは、いくつかの要素を持つ変数、です。
変数[index]によって、その1つの変数として値を参照することができます。

といってもわかりづらいので、例を示します。
@home=(
	"tatoeba",
	"kouiu fuuni",
	"atai wo irete",
	"mimasu"
);
配列@homeが、これで生成されました。
今生成した内容を表にするとこういう風になります。
配列@homeの内容
indexvalue(値)
0tatoeba
1kouiu fuuni
2atai wo irete
3mimasu

配列の始点は必ず0からです。
配列の末尾は作成するときによって変わってきます。
上のように作成した場合には、順番通り、4つの要素を入れていくことになるので、
0,1,2,3のindexを持ちます。

配列を操作したり、配列の中の1つの値を入手したい時には、1つの変数を扱うように
操作します。
配列@homeの2つ目の値(index)を、変数$nyankoに入れてみましょう。
$nyanko = $home[2];
これで、変数$nyankoに、$home[2]...配列の[2]のindexに存在する、atai wo irete
が代入されました。

ちょっとまとめましょう
配列@homeの1つの要素を見るには、$home[index]という風に指定する。
indexは、一般的に「添え字」というようです。

これをline(行)として覚えてみると、少しは簡単かもしれません。

ここにノートがあります。
1ページが、「40行」のノートです。
ノートの1つの行の値は、それぞれ0行目,1行目,2行目...という風に並んでいて、
最終行は40行です。
ノートの1ページは、複数の行=複数の変数、によって構成されているリスト=配列
とみなすことができますね。
ノートの0行目を見たければノート[0行目]
ノートの32行目を見たければノート[31行目]
・・・ということになります。
※0から数えるので、32-1で、31として指定しています。
※もっと細かく考えるとノートの1行も、1文字1文字により構成されている、
※ということになりますが。
※ま、それはさておき....

このように、配列とは0から順に作成されるリストであって、
リスト(配列)の値の一部は、変数と同じということが
わかっていただけるかと思います。

この添え字を使えば、一番最初に配列を定義したものも、
こんな風に定義することができるようになります。
$home[0]="tatoeba";
$home[1]="kouiu fuuni";
$home[2]="atai wo irete";
$home[3]="mimasu";

配列の値がどのぐらいの長さなのか、途中で知りたくなった場合は、
$line = @home;
という風に 変数 = 配列; とすることで、配列の長さが、変数に代入されます。
便利なので覚えましょう。

途中で配列の中身を全部クリアしたい時
@home=();
もしくは完全に消す場合
undef @home;
undefは変数などでも使えますが、それほど利用する場面はあまりない関数(命令)だと
思います。
undefは指定したものを未定義値にする、という関数(命令)です。

undef(未定義)なのか、defined(定義された)か、は重要な項目です。
Perl5からは@という文字は、完全に配列を示すための文字になりました。
メールアドレス test@test.comというアドレスを、画面に表示(print)させたい場合、
print "my address > test@test.com";
などとすると、" "ですから、配列@testを展開しようとしてエラーが発生します。
@の前に\を置いてクォートさせるか、' '(シングルクォーテーション)
でprintさせるようにする必要があります。
※基礎講座の変数のところで書いた通りに、" "の中は変数展開が起こります。

また、スクリプト中のprint中で配列を表示させたい場合、
定義された配列の場合は、中身がそのまま表示されますが、
その配列が未定義値だった場合、
文字列中の@に\を置いてクォートしろ!というエラーが出てしまいます。
sample script
print "test@test.com";
exit;
test.plとして保存して実行。
未定義だと、このように「文字列中の@に\を置いてクォートしろ!」と、
エラーが出ていますね。
これに対して、空の中身の配列@testを作成した後はこうなります。
sample script 2
@test=();

print "test@test.com";
exit;
test_2.plとして保存して実行。
@testを空の値として定義してあるので、エラーは出ずに、
test.com
が表示されて終了しました。

@を文字としてそのまま表示したいのか、
@を配列として表示させたいのか、
その値は未定義なのか、定義されているのか、
ここのところに気をつけてください。


さて、簡単でしたが、配列とはなんぞや、はここまでで、
配列を便利に操作できる関数(命令)を紹介します。


push
配列の末尾に値を追加します。配列の要素(index)が1つ増える。
値として、現在の要素(index)数を返します。

使い方
 push 配列名,入れたい値(もしくは変数)
要素数を取得しつつ、値を追加する場合は
 変数 = push 配列名,入れたい値(もしくは変数)

pop
配列の末尾の要素を取り除く。配列の要素(index)が1つ減る。
値として、取り除いた値を返す。

使い方
 pop 配列名
取り除いた値を取得する場合は
 変数 = pop 配列名

shift
配列の先頭の要素を取り除く。配列の要素(index)が1つ減る。
先頭を取り除くので、先頭より後ろの要素が1つずつ前にずれる(シフトする)。 値として、取り除いた値を返す。

使い方
 shift 配列名
取り除いた値を取得する場合は
 変数 = shift 配列名

unshift
配列の先頭の要素に追加する。配列の要素(index)が1つ増える。
先頭を追加するので、以前の要素が1つずつ後ろにずれる(シフトする)。 値として、現在の要素(index)数を返す。

使い方
 unshift 配列名,入れたい値(もしくは変数)
取り除いた値を取得する場合は
 変数 = unshift 配列名,入れたい値(もしくは変数)

splice
配列から指定した場所から、指定した長さ分取り除く。
配列の要素(index)が指定した分減る。
取り除いた部分から後の要素は指定した場所の後ろへと移動する。
値として取り除いた要素を返す。
長さを指定しなければ、指定した場所から後ろ全部のデータが取り除かれる。
入れたい値が指定されていれば、取り除いた部分に値を挿入する。

使い方
 splice 配列名,offset(指定する場所),length(指定した長さ),list(入れたい値)
取り除いた値を取得するには
 配列 = splice 配列名,offset,length,list



CGI工房 ホーム  更新履歴  掲示板系  チャット系  メール系  その他スクリプト  スクリプト講座  情報交換BBS
ご意見・ご要望は掲示板もしくは、メールにて:info@pumpkinnet.to

Copyright (C) 1986〜2004 Pumpkinnet All Rights Reserved
PumpkiNet-MiniBanner