プログラミング入門

配列について知ろう

この章では配列について説明します。
普通の$bookのような変数は1つしかデータを入れることができません。
つまり、変数は他のデータを入れようとするとデータが上書きされてしまいます。
それに対して配列は複数のデータをまとめて入れることができます。
複数のデータを扱う場合、変数では以下のように別々の変数名でそれぞれのデータを入れなければいけません。 配列を使うと以下のように1つの配列名@animalで複数のデータを入れることができるのです。 @animalの中にはがお互い関係性を持って存在していると言えます。
この例のように同じ目的で使用するデータは1つにまとめてしまい、1つの配列で複数のデータを管理できると便利です。
このような時に配列を使用します。 配列を扱う時には配列名の前にアットマーク@ を付けます。
そして右辺はカッコの中をカンマで区切って要素を入力していきます。
例えばのようにデータをカッコで囲んで、カンマ区切りで複数のデータを作っていきますが、このようなデータをリストと言います。そのリストを左辺の配列名に入れます。例えば以下のように作成します。この配列に入っているデータは「添え字」といわれるもので管理します。
添え字とはデータが保管してある場所の概念で、0から番号が付けられていきます。
例えばコインロッカーには番号が付いていますが、番号が付いているからこそ、どこに自分の荷物があるのか分かりますが、これと同じで配列のデータは添え字で管理します。 この$animalの右についてる[0]や[1]が添え字です。
リストの中の個別のデータを指し示すためには@animal[0]ではなく$animal[0]と書きます。
つまり、先頭の記号は@ ではなく$です。
例えば「print $animal[0];」で出力すると「猫」が出力できます。先ほども説明しましたが、添え字は0から順番に番号が付けられていきます。
配列の一番先頭のデータに対応する添え字は1ではなく0です。
ではを例に取って配列について、さらに詳しく説明します。 上の配列文は以下のように書く事も出来ます。 qwはデータ間をスペースやタブなどの空白文字で区切ったリストを作成する演算子です。
qw演算子の中の文字列はシングルクォートで囲まれたものとみなされるので、文字列を囲う必要はありません。
@animal1と@animal2のリストから、新しい配列@animal3
を作成しています。
結果はです。 以下の例のように新しい配列@animal3を作成した後に@animal1や@animal2の内容が変化しても@animal3には影響しません。
以下の例のように@animal3を作成した後に@animal2に龍を加えても、@animal3には影響がありません。
結果は変わらず「猫 犬 ライオン 象 ネズミ コアラ ネッシー」です。 例の中のコメントのしてある箇所と同じことを意味しています。
リストの中にある「..」を範囲演算子と言います。
例えば(1..100)は1から100までを意味しています。
実際、1から100までをリストに書いていくことは効率が良くないので、このような場面で範囲演算子を使用します。 添え字は0から順番に番号が付けられていきます。
2つの配列の対応関係を図にしたので参考にしてみてください。 もっと詳しく対応関係を説明しますと以下のようになります。 以下の構文でも配列の要素にデータを入れることが出来ます。 今までは以下のように1個1個配列に値を入れていましたが、上の配列の基本構文でも配列にデータを入れることが出来ます。 先ほどの構文では以下のようにデータを入れていきます。 これはリストを使ったデータの代入の仕方です。
この構文であれば右辺のリストの要素を一気に左辺の変数に代入することが出来ます。
右辺のリストの要素数のほうが、左の変数より多い場合は、余った値は捨てられます。
では例をみてみましょう。 結果は「猫犬」です。
この例の場合は余った狸は捨てられます。
逆に右辺のリストの要素数のほうが、左の変数より少ない場合は余った変数には未定義値であるundefが代入されます。
undefとは変数などが未定義な状態を言います。
undefは何も入っていないのでprintで出力しても画面には現れません。 基本構文は以下の通りです。 では例をみてみましょう。 この例では猫が$aに,犬が$bに,ライオンが$cにそれぞれ入ります。
結果は「猫,犬,ライオン」です。
この例はリストを使った以下の方法と同じ意味です。配列のデータを変更するにはのように新たなデータを代入するだけです。
これで古い要素である猫、犬が上書きされて新しいデータであるキリン、パンダに上書きされます。 配列の要素を出力するには以下の構文で書きます。 では例をみてみましょう。
以下の通り、添え字に相当するデータを取り出すことが出来ます。

次は配列全体の要素を出力する方法について説明します。 今までは個別に
print $animal[1];
print $animal[2];
と出力していましたが、配列の要素を一気にすべてを出力させたい場合には以下のように記述します。 この2種類の出力方法の差は何かといいますと配列をダブルクォートで囲んでいるか、囲んでいないかの差です。
結果は以下のようになります。 ダブルクォートで囲んだ方はデータ間がスペースで区切られます。
ダブルクォートで囲まないとデータ間にスペースが生まれないので、連なって出力されます。 例えば下の配列を初期化したい場合、つまり要素を消したい場合は以下のようにカラのリストを代入します。
空にしますとそれ以降は出力することはできません。