MTでPerlを学ぶ(その15・配列)

同じ性質がある多くのデータを、プログラムで扱いたいことは、非常によくあります。
例えば、10人でゲームをして、各自の得点を集計したり場合、「得点」という同じ性質のデータを10件扱うことになります。
このような時には、「配列」を使うと効率良くデータを扱うことができます。

1.配列変数の宣言

これまでの回で変数を扱ってきました。
変数は「$foo」のように、「$」から始まる名前を付ける決まりがありました。
また、変数を使う前に、「my $foo;」の文を実行して、変数を使うことをあらかじめ宣言していました。

配列も変数の一種ですが、これまでの変数とは異なり、「@」の記号で表します。
「@」の記号は、「array」(配列)の「a」に由来するそうです。
例えば、ゲームの得点を扱うために、「@points」という名前の配列変数を使うなら、以下のように宣言します。

my @points;

また、1つのmy文で複数の配列変数を宣言することもできます。
その場合は、配列変数名のリストを括弧で囲みます。
例えば、「@points」と「@names」の2つの配列変数を一度に宣言するには、以下のように書きます。

my (@points, @names);

なお、通常の変数と配列変数に同じ名前を付けた場合、両者は別のものとして区別されます。
例えば、通常の変数の「$points」と、配列変数の「@points」は、名前は同じですが、別のものとして区別されます。

2.配列変数の個々の要素の扱い

配列変数は、多数の変数が集まったようなものとして扱うことができます。
配列変数内の個々の変数のことを「要素」と呼びます。

個々の要素は、「$配列変数名[インデックス]」のように表します。
インデックスとは、配列全体の中で何番目の要素であるかを表す値で、0番から順にプラスの整数で指定します。
例えば、配列変数@pointsの0番の要素は、「$points[0]」と表します。
また、配列変数全体は「@」の記号で表しますが、個々の要素は上にあるように「$」で表します。


配列変数と個々の要素の関係(クリックで図を大きく表示)

配列変数の個々の要素は、前述したように通常の変数と同じように扱います。
例えば、@pointsを宣言してあるとします。
この時に、以下の図のように各要素に値を代入したいとします。


配列変数@pointsの各要素に代入する値(クリックで図を大きく表示)

この処理は以下のように書くことができます。

$points[0] = 100;
$points[1] = 200;
$points[2] = 300;

また、上のように配列に値を代入してあるとして、以下の文を実行すると、変数$pointには配列変数@pointsの0番の要素の値が代入され、変数$pointの値は100になります。

$point = $points[0];

なお、上の例では配列に数値を代入していますが、文字列を代入することもできます。
また、「0番目の要素は数値、1番目の要素は文字列・・・」というように、1つの配列に数値を文字列を混在させることもできます。

3.配列に値をまとめて代入する

上の例では配列の1つひとつの要素に順に値を代入していますが、以下のような書き方をすることで、一気に代入することができます。

@配列変数 = (値1, 値2, 値3, ・・・);

例えば、前述の例は以下のように書き換えることもできます。

@points = (100, 200, 300);