配列 Perlの特長のひとつに、”配列の操作が多機能である”という点があります。Basicの配列はきわめてシンプルな機能しか提供していませんが、Perlでは、配列の並びをリストとして扱い、先頭要素への追加(push)、 削除(pop)、などを行う関数を実装しております(ちょっとLisp的なこともできます)。 PerlのPerlらしさを120%活用には、まずこの配列操作を十二分にマスターする必要があります。 ということで、まず配列の基本的なところをまとめてみました。 1 配列の定義 (1) 配列の定義(宣言) Perlの特長を理解するために、なじみ深いBasicやC言語と比較しながらみてみましょう。 まず、Basicで0〜9までの数を配列に設定する方法をみてみます。 10 dim numbers(10) 20 for i=0 to 9 30 numbers(i)=i 40 next ま、こんな感じでしょうか。 data文が使えるBasicでは、以下のような記述も可能ですね。 10 dim numbers(10) 20 for i=0 to 9 30 read numbers(i) 40 next 50 data 0,1,2,3,4,5,6,7,8,9 ではC言語の場合はどうでしょうか。 main() { int numbers[10]; for (i=0; i<10; i++ ) { numbers[i]=i; } } こんな感じか、あるいは以下のような記述もできますね。 main() { int numbers[10]={0,1,2,3,4,5,6,7,8,9}; } では、Perlで配列を宣言し、値を設定してみましょう。
@numbers=(); @numbers2=(10,11,12,13,14); というのがPerlの配列の宣言です。Perlでは変数名には先頭に$をつけましたが、配列名には@をつけます。 @numbersの方は、配列名だけ宣言しておいて、あとでforループで個々の配列の要素に値を代入しています。 Basicで慣れ親しんだやり方ですね。 個々の配列の要素のひとつを変数として参照する時には、$numbers[2] のように記述します。すなわち $配列名[添え字] という形式です。添え字は0から始まります。ここら辺はBasic、C言語とも似ているのでわかりやすいでしょう。 さて、Perl独特なのは、@numbers2=(10,11,12,13,14); の方ですね。 Perlでは、このように要素を列挙して(リストと呼びます)宣言できます。ここだけ見るとC言語の後者の方法 と似ていますが、Perlではこのリストに対して、リストの先頭の要素の追加、削除、最後の要素の追加、削除 といった関数が用意されています。 なんとなく、Perlの方がBasicやC言語より、配列に対して多機能かつ強力な感じがしませんか。 (2) 配列変数と要素の取り出し方 配列の定義の仕方がわかったところで、配列の要素の取り出し方をみてみましょう。上でもふれましたが、 @numbersの3番目の要素は$numbers[2]で参照できます。添え字は0から始まるので、3番目の要素は 添え字2で参照されることに注意して下さい。 それでは、配列変数そのもの@numbersを参照すると、何が返されるのでしょうか。配列変数そのものを 参照すると、要素全部をつなげて返します。 上記のプログラムarray0.plの実行結果を示しますので、print @numbers; print @numbers2; の結果を確認して みて下さい。
2 便利なリストの定義の仕方 リストの定義の仕方では、なかなか便利な機能もあるので、それについてちょっとみてみましょう。 (1) ショートカット 例えば @numbers=(1,2,3,4,5,6,7,8,9); という定義をする時、@numbers=(1 .. 9); という記述ができます。 このように続き番号のリストで、途中を .. で補完することができます。これがショートカットです。 例えば (1,3 .. 8,10) というリストは(1,3,4,5,6,7,8,10) になります。またショートカットは数字だけでなく アルファベットでも使用できます。 (2) リストに別のリストを格納 リストには、数値と文字列を混合して格納することができます。また変数も格納できますし、他のリストを 格納することもできます。 @numbers=(1,2,3); @array=("a","b","c",@numbers); とすると、@arrayには("a","b","c",1,2,3)が格納されます。 (3) 配列の要素数 配列変数の後ろに、+ かまたは . (ドット)をつけて参照すると、格納されている要素数を返します。 @numbers=(1,2,3); print @numbers+; とすると、要素数である3が返されて表示されます。 ちなみに、算術式の中で配列変数を使うと要素数を返しますので、以下のfor文の中の$i<@arrayは$i<9 と同義です。 では最後に、プログラム例と実行結果をあげておきますので確認してみて下さい。
|