配列
複数の値を持つ変数
もしあなたが他のプログラム言語の経験者であるのなら、配列という言葉は聞き慣れていることでしょう
配列は同種の内容を複数に分けて制御したい時などの実用されます
配列は非常に大切であり、配列を知らなければプログラムはできないと言っても過言ではありません
よくわからないというのなら、変数の変数を作りたい時に使うものであると思っても良いでしょう
これまで10個の変数の内容をユーザーが指定して出力するということができましたか?
1が入力されたら…という処理はできたかもしれませんが、その個数だけ制御文を書くのは不合理です
A1、A2というようにして、ユーザーが1番を指定したらA1をプリントするようにしたい
このような処理を配列は可能にします
他言語のプログラマに気をつけていただきたいのですが、Perl言語の配列はC/C++やBASICとは宣言が異なります
Perl言語には配列要素数の宣言はありません
配列変数はスカラー変数と異なり@を変数の前につけます
@array_name
となります。もう一度言いますが宣言はありません。スカラー変数同様、作成した瞬間から使用できます
配列の個数(要素数)は、代入されたデータによって自動的に割り当てられます
配列変数に複数の値(配列の中のそれぞれの値のことを要素といいます)を代入するにはリストを作ります
注) ピアノの魔術師と呼ばれた名作曲家じゃありません(^^;
リストは()で囲んで、それぞれの値(要素)を ,(コンマ) で区切ります
(value1 , value2 ,value...)
このリストの中の各値が要素です
つまり、配列変数に対してリストを代入します
@array = (list);
配列変数にアクセスするには、やはりスカラー変数同様のやり方です
@arrayというように@のあとに配列変数名を指定してください
では、配列変数にリストを代入して画面にその内容を出力してみましょう
@Array = (1,2,3,4,5);
print "配列変数の内容 = @Array";
これで配列変数@Arrayの中に、1〜5までの5つの要素が代入されたことになります
print命令で@Arrayを呼び出しています。これはリストとして参照しているのでその内容が出力されます
print "配列変数の内容 =" , @Array; と記述してもかまいませんが、その場合スペースで区切られません
次に配列変数をスカラー変数として参照する方法もあるので、それをやってみましょう
配列変数をスカラー変数として参照すると要素の数が出力されます
スカラー変数として参照するにはドット演算子( . )などを用いて演算するとスカラー変数として扱われます
@Array = (1,2,3,4,5);
print "配列変数の要素数 = " . @Array . "\n";
print @Array + 10;
#↑要素数にたして演算もできる
リスト参照と要素数参照の違いを理解してください
配列に代入する要素の型は、数だけではありません
文字列、変数、配列も可能で、それぞれを混同して代入することも可能です
$var = "変数です";
@Array_list = (20,30);
@Array = (10,@Array_list,$var);
print '@Arrayの内容 = ' , "@Array";
ショートカット
もし要素の内容が0〜100までの数だとしたらどうしましょう
わざわざリスト内に0,1,2,3…とかくのは非常に面倒ですし、ソースも可読性を失います
そこで(0..100)と書けば、0〜100までの101の要素がリストに用意されます
@Array = (0..10);
print '@Arrayの内容 = ' , "@Array";
また、要素の内容が文字列ばかりだとしたら、各要素にクォーテーションを書くのは面倒ですね
文字列が膨大な長さであれば、一行にまとめるのもむづかしいです
そのような時はリストの前にqw演算子を用います
これを使えば、リストの要素が全て文字列になります。気をつけて欲しいのが、要素の区別に , (コンマ)を使いません
qwを使った場合はスペース、改行、Tabを使って要素を区切ります
@Array = qw (我は無敵なり
我が一撃にかなうものなし 我が一撃は無敵なり);
print '@Arrayの内容 = ' , "@Array";
指定要素を参照する
配列にリストを代入して、それをリストとして一覧することはできました
しかし、リストの中のひとつの要素(値)だけを取り出すというのが配列の目的です
冒頭で説明した、ユーザーによる入力によって参照する変数を動的に変化させるプログラムを作ってみましょう
その前に、まずは指定要素を参照する方法を覚えましょう
各要素には要素番号がそれぞれに存在しています
要素番号(インデックスといいます)はリストの左を0(添字といいます)として始まります
@array = ("a" , "b");
要素番号の指定をして参照する場合はスカラー変数として呼び出します
$array[0] これで配列要素 a を参照することになります
このように要素指定には [ ] を用いて指定します。これには当然変数や式を指定できます
print "要素番号を入力してください\n";
$h = <STDIN>;
chomp($h);
@Array = qw ( あかりちゃん
志保ちゃん
ヒロユキちゃん
雅史君 );
print (($h <= 3) && ($h >= 0)? "選ばれし者は$Array[$h]です" : "その要素はありません");
これらは配列を使ったプログラムのほんの一例です
貴方の発想とひらめきで、より複雑で高度なプログラムを可能とするでしょう