配列の初期化
変数では宣言と同時に初期化をすることが出来ましたが、配列も同じように宣言と同時の初期化を行うことが出来ます。配列を宣言すると同時に格納する値を初期化するには次の書式を使います。
my @配列名 = (値1, 値2, ... , 値n);
配列に格納したい値をカンマで区切って並べ、全体を括弧()で囲んで指定します。
この値の指定方法はリストそのものです。つまり配列を初期化する時にはリストを指定するということになります。例えば次のように記述します。
my @name = ("伊藤", "加藤", "山田");
初期化を行った場合には、リストの値がインデックス0から順に配列の要素に格納されていきます。よって次のように記述した場合とほぼ同じです。
my @name; $name[0] = "伊藤"; $name[1] = "加藤"; $name[2] = "山田";
配列の宣言時以外にリストを代入
配列を宣言する時以外にもリストを使って初期化することができます。
my @name; @name = ("伊藤", "加藤", "山田");
この時注意して頂きたいのは既に配列にいくつかの要素が含まれている時にリストを使って初期化をすると、既にある要素は全てクリアされた上で新しく初期化されるということです。具体的な例で考えてみます。
my @num; $num[0] = 10; $num[1] = 9; $num[2] = 24; @num = (3, 7);
上記ではまず0番目から2番目までの要素に値を格納しています。その後で2つの値を使って初期化を行うと、0番目と1番目の要素の値だけが書き換えられて2番目の要素はそのままというわけではなく、配列がの要素が全てクリアされてから0番目と1番目の要素に値が格納されます。つまり2番目の要素は存在しなくなります。
もしも0番目と1番目の要素をリストを使って書き換えたい場合には、変数の場合と同じく次のように記述します。
my @num; $num[0] = 10; $num[1] = 9; $num[2] = 24; ($num[0], $num[1]) = (3, 7);
配列を一度リセットしたい場合は、空のリストである()を代入して下さい。
my @num; $num[0] = 10; $num[1] = 9; $num[2] = 24; @num = ();
サンプルプログラム
では簡単なプログラムで確認して見ます。
use strict; use warnings; use utf8; binmode STDIN, ':encoding(cp932)'; binmode STDOUT, ':encoding(cp932)'; binmode STDERR, ':encoding(cp932)'; my @name = ("伊藤", "工藤", "山田"); $name[3] = "高橋"; $name[1] = "安藤"; for (my $i = 0; $i < 4; $i++){ print "$name[$i]¥n"; }
上記を「test5-1.pl」の名前で保存します(文字コードはUTF-8です)。そしてコマンドプロンプトを起動し、プログラムを保存したディレクトリに移動してから次のように実行して下さい。
今回は配列を初期化した後で、要素を1つ追加し、既にある要素を別の値で書き換えています。
( Written by Tatsuo Ikura )