Perl入門 ≫ LESSON5 配列
配列って?
配列とはなんぞや?
難しく考えることはありません。
リストと言えばわかりやすいでしょうか?つまり、データのまとまりです。
データをまとめて、順番に持ちたい場合に使います。
例えば、5人の名前をプログラム中で変数として扱う場合、
$name1 = "takeda";
$name2 = "uesugi";
$name3 = "houjou";
$name4 = "oda";
$name5 = "date";
これでもいいんです。別に。ただし、やっぱり同じ内容のデータだったら、まとめて保持できないものか?
と考えると、この名前一覧を“名前”という配列に入れてあげればスマートです。
名前配列 = ("takeda","uesugi","houjou","oda","date")
こんな風に。
すると、名前配列の何番目のデータは・・・ってな具合で利用できるのです。
では、他のデータで実際にやってみましょう。
配列名の前には@をつけて表現します。
@hensu = ('data1','data2','data3');
この場合、配列@hensuには3つのデータ(要素)が入っています。
配列の各データは各自”,”で区切り、“(”と“)”の間に左から順に書きます。
配列@hensuの一番目のデータは文字列'data1'、二番目のデータは文字列'data2'、三番目のデータは文字列'data3'です。
定義するのはわかったけど、その値を見る時はどうするかというと、それぞれ$hensu[0],$hensu[1],$hensu[2]で取り出すことができます。

配列名と同じ名前の前に$を付けます。
[ ]の中の数字の部分は、添え字と言い、必ず0から始まります。
それぞれの場所の値を変更する場合、$hensu[1]に値を代入すれば良いのです。
現在の最大添え字よりも大きい場所に値を追加すると、配列はそこまで拡大されます。
ちょっとやってみましょう。
my @hensu = ('data1','data2','data3');
print "1th data = $hensu[0]\n";
print "2th data = $hensu[1]\n";
print "3th data = $hensu[2]\n\n";
#それぞれのデータを取り出します。
$hensu[2] = 'data2_1';
print "2th data = $hensu[2]\n\n";
#2番目のデータを変更します。
$hensu[3] = 'data4';
print "4th data = $hensu[3]\n";
#4番目にデータを追加します。
結果は以下。
1th data = data1
2th data = data2
3th data = data3
2th data = data2_1
4th data = data4
各配列を最初に宣言する時にも、変数宣言と同じで配列名の前に”my”と付けましょう。ファイル内での変数を表します。
配列の中のデータは文字列だけではありません。
数字や数字と文字の混ざったもの、あとは『スカラー:参照』の部分でやったリファレンスも入れることができます。
@hensu = (10,35,60,77);
@hensu = (2, "aaa",5);
扱い方は文字列と同様です。
リストの数
@hensu = (10,35,60,77);
の配列の要素の数は4つです。
では、要素が0のリストは
@hensu = ();
と書きます。
実は配列はいきなり
$hensu[0] = 1;
などとやっても怒られます。
配列@hensuが初期化されていない!といわれちゃうので、配列を使う場合、定義するものが何もなければとりあえずこの
my @hensu = ();
とやって初期化しておきましょう。この何もない配列をNULLリストと言います。
では、初期化してその後は配列の最初の要素から順に値を入れていかなければならないかというと、そんなことはありません。
初期化さえしてしまえば、配列が許す範囲内で自由にどの要素にもアクセスできます。
では、その間とそれより大きい添え字部分の要素の中身はどうなっているかというと、何にも入っていません。
my @hensu = ();
$hensu[2] = "test";
print "1th data = $hensu[0]\n";
print "2th data = $hensu[1]\n";
print "3th data = $hensu[2]\n";
print "10th data = $hensu[9]\n";
#それぞれのデータを取り出します。
結果は以下。
1th data =
2th data =
3th data = test
10th data =
実際は警告が入りますが、3番目のデータ以外何も入っていないことがわかります。
ですが、実際はやはりちゃんと最初からデータを定義していって、何もなければ0なり""(長さ0の文字列)なり定義しておくことを勧めます。
要素の値
配列の各要素の値は、数値・文字・文字列・リファレンスが使えます。
が、他にも変数と配列そのものも使うことができます。
変数を使う場合は以下のようになります。
my @hensu = ($d1,'data2','data3');
my @hensu = ($d1,"data2 ${d1}",'data3');
配列を使ってみましょう。
my @hensu1 = (30,40);
my @hensu2 = (10,20,@hensu1,50);
#(10,20,(30,40),50)ということ
print $hensu2[3];
結果は以下。
40
ということです。
配列の中に配列を定義すると、その配列の用素をまるまる入れ込んだことになります。
配列の最大添え字
配列名の前に$#を付けると、配列の最大添え字を調べることが出来ます。
my @hensu = (10,20,30,40,50);
print $#hensu;
結果は以下。
4
添え字は0からスタートするので、最大添え字が4ということは要素数はプラス1で5ということになります。
要素が何もないNULLリストの場合、$#hensuの値は-1になります。
配列のリファレンス
配列へのリファレンスを作ってみます。
配列へのリファレンスでは、値を参照するのに
$参照名[0]
とはできません。
「->」というアロー演算子を使います。
$参照名->[0]
という具合です。
my @hensu = (10,20,30,40,50);
my $hensu1 = \@hensu;
print $hensu1->[0];
参照名は「変数」です。配列ではないので。$hensu1になります。@hensu1にはなりません。
結果は以下。
10