6.配列

配列は変数の前に「@」をつけて表します。

配列とは、同じ型のデータ(変数)を連続的に並べて扱うデータ形式のことです。
各データをその配列の要素といい、それらは添字(数字)で識別されます。

※配列変数全体を表す場合は「@」を使いますが、この配列変数の1要素(添字)を指定する場合は、同じ変数名の記号が「$」に変わります。

@配列変数への値の代入方法

配列変数への値の代入は次のように記述します。下記例での配列変数に格納される値は全て同じです。
【例1】  @DATA = ('ガンダム', 'ザク', 'ジム', 'ドム') ;

【例2】
      @DATA[0] = 'ガンダム'
      @DATA[1] = 'ザク'
      @DATA[2] = 'ジム'
      @DATA[3] = 'ドム'

【例3】  @DATA[0..3] = ('ガンダム', 'ザク', 'ジム', 'ドム') ;
代入のイメージは次のような感じですね。
変数名 配列位置(要素)
@DATA 0 ガンダム
1 ザク
2 ジム
3 ドム
こんな見方もありでしょう。
変数 : @DATA
要素 0 1 2 3
ガンダム ザク ジム ドム
※配列要素は「0」から始まります。

A配列変数の値の参照方法

配列変数の値を参照して出力するには次のように記述します。下記例の出力は同じ結果になります。
前項でのイメージから容易に想像できますね。
・参照する配列変数  @DATA = ('ガンダム', 'ザク', 'ジム', 'ドム') ;
【例1】
print $DATA[0]
print $DATA[1]
print $DATA[2]
print $DATA[3]
【例2】 print $DATA[0..3]

B配列の添字

配列の要素番号をあらわす数値または文字列(この場合は変数だね)を添字といいます。
例えば・・・・ $DATA[5] の場合は「5」が添字です。
また、 $INPUT_FORM['age'] の「age」も添字です。
上でも書きましたが、配列の添字は「0」から始まります。
配列の要素数を調べるには $youso = $DATA などのように通常の変数に代入することで求められます。
A項の場合には $youso は 4 になります。これは「0から3の添字が使える」ということですね。

C配列リストの操作関数(ほんの代表的な例です。)

リストとはスカラー(Perlが扱う最も単純なデータです。数値や文字列がスカラーになります。Perl ではこの2つはほとんど同じものとして取り扱います。)値を順序をつけて並べたものです。配列はリストを格納する変数のことです。
以下の関数説明で参照する配列リストは次のとおりです。・・・・って前にも何回か出てきていますね。
@DATA = ('ガンダム', 'ザク', 'ジム', 'ドム') ;
(1) shift 関数
書式 : shift (@DATA)
配列 @DATA の最初の要素を取り出します。この時、各要素は1つずつシフトアップ(イメージ的には左)され、要素数も1つ減ります。(添え字番号が -1 される)
関数の引数を処理したり、プログラムへのコマンドラインからの引数を処理したりするのによく利用されます。
【例】
$model = shift ( @DATA ) ;       → $model には「ガンダム」が格納されます。
'ザク', 'ジム', 'ドム'    → 処理後 @DATAは こんなんなっちゃうのかな?
(2) unshift 関数
書式 : unshift (@DATA, $list)
配列 @DATA の先頭に $list の値を追加します。それに伴い各配列要素の値は右にシフトします。要素数も1つ増えます。
【例】
$list = 'ズゴック' ;
unshift (@DATA, $list);
処理前は @DATA = ( 'ザク', 'ジム', 'ドム') ; ですが、処理後は @DATA = ('ズゴック', 'ザク', 'ジム', 'ドム') ; ですね。
(3) pop 関数
書式 : pop (@DATA)
配列 @DATA の最後の要素を取り出します。この時、要素数も1つ減ります。
【例】
$type = pop (@DATA) ;
処理前 @DATA = ( 'ザク', 'ジム', 'ドム') ; の場合 $type には「ドム」が格納されます。処理後は @DATA = ( 'ザク', 'ジム') ; かな!
(4) push 関数
書式 : push (@DATA, $list)
配列 @DATA の最後に $list の値を追加します。この時、要素数も1つ増えます。
【例】
$list = 'ズゴック' ;
push (@DATA, $list);
処理前 @DATA = ( 'ザク', 'ジム', 'ドム') ; とすれば、処理後は @DATA = ( 'ザク', 'ジム', 'ドム',ズゴック' ) ; ですね
(5) splice 関数
書式 : splice (@DATA, OFFSET, LENGTH)
@DATA の OFFSET番目から LENGTH個の要素を削除します。LENGTHを省略すると最後まで削除します。
push, pop, shift, unshift などは、splice を使って表現することができます。
【例】
処理前 @DATA = ( 'ザク', 'ジム', 'ドム',ズゴック' ) ; があったとします。これを・・・・

splice (@DATA, 2, 2);    ・・・・とすると!

処理後は @DATA = ( 'ザク', 'ズゴック' ) ;  になりますね。
(6) sort 関数
書式 : sort (@DATA)
配列 @DATA を文字コードの昇順に並べ替えます。
ブロックを指定して比較しながらの並べ替えや数字としての並べ替えなどできますが、ここでは割愛です。
(7) reverse 関数
書式 : reverse (@DATA)
配列 @DATA を文字コードの逆順に並べ替えます。
ブロックを指定して比較しながらの並べ替えや数字としての並べ替えなどできますが、ここでは割愛です。
(8) grep 関数
書式 : grep (/GREPPATTERN/,@DATA)
配列 @DATA から GREPPATTERN にマッチングする文字列を含む行だけを抽出します。
日本語の検索には使えません。

戻る

サイトトップへ