配列の宣言と要素へのアクセス
それでは配列についてもう少し詳しく確認していきます。変数の場合と同じく配列を使用する場合にも宣言を行います。変数の場合はプレフィックス名して「$」を使用しましたが、配列の場合は「@」を使用します。
@配列名
例えば配列名として「name」を使った配列を宣言する場合は次のようになります。
my @name;
配列はリストの場合と同じく複数の値を管理しており、1つ1つは要素と呼ばれます。配列では要素はそれぞれ変数です。つまり配列では複数の変数を管理していると考えても構いません。変数はそれぞれ1つの値を管理できますので、配列では1つの値を管理できる変数をまとめて管理することにより複数の値を管理できるようになっています。
プログラミング言語によっては配列を宣言する時にいくつの要素を管理するのかを指定する言語もありますが、Perlの配列では、その配列が管理する要素数は自動的に拡張されたり縮小されたりします。
配列への値の格納と取得
配列に値を格納する場合は、配列が管理している複数の変数のどこか1つを指定して値を格納することになります。
配列の中に含まれる要素としての変数はインデックスと呼ばれる数値で区別されます。インデックスの先頭は0番目からとなっており、順に1番目、2番目、と続いていきます。配列の各インデックスに対応する領域に値を格納するには次の書式となります。
$配列名[インデックス] = 値;
配列に含まれる要素は1つ1つが変数ですので、インデックスを指定して要素に対して値を格納する場合は、プレフィックスが「@」ではなくて「$」となりますので注意して下さい。
my @seiseki; $seiseki[0] = 80; $seiseki[1] = 75;
上記の場合、まず配列「@seiseki」を宣言しています。そして配列の0番目の要素に数値の「80」を、1番目の要素に数値の「75」を格納しています。インデックスは括弧[]で囲んで指定します。
前述した通り、Perlの配列は要素を自動的に拡張します。その為、1番目の要素に値を格納するように記述すると自動的に1番目の要素が用意されます。例えば続けて2番目の要素利用するように記述してみます。
my @seiseki; $seiseki[0] = 80; $seiseki[1] = 75; $seiseki[2] = 65;
この場合は自動的に2番目の要素が用意されます。では連続していないインデックスを指定した場合はどうなるのでしょうか。
my @seiseki; $seiseki[0] = 80; $seiseki[1] = 75; $seiseki[2] = 65; $seiseki[5] = 92;
この記述自体はエラーではありません。この場合、5番目の要素が用意され数値の「92」が格納されます。ただし要素はインデックスに合わせて先頭から順に用意されていきます。2番目の要素まで使っていた状態の時に5番目の要素を使用すると、自動的に3番目と4番目の要素も用意されます。この自動的に作成された要素は初期化されていませんので要素の値は変数の場合と同じく未定義値「undef」となります。
要素に格納された値を取得する場合も変数の場合と基本的に代わりありません。変数の場合が「$変数名」だったのに対して配列の要素の場合は「$配列名[インデックス]」で参照できます。
my @seiseki; $seiseki[0] = 80; $seiseki[1] = 75; $seiseki[2] = 65; print "$seiseki[1]¥n";
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my @seiseki; $seiseki[0] = 80; $seiseki[1] = 75; $seiseki[2] = 69; $seiseki[5] = 91; print "$seiseki[5]¥n";
上記を「test4-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
( Written by Tatsuo Ikura )