KAIHATSUGIKEN GROUP
************************************************************************************
21 要素
**************
要素の個数を調べるには
@a=(1,2,3);
$count=@a;
@b=@a;
2行目の$count=@a;
では@aがスカラーコンテキストで計算されて、$countには@aの長さ 3 が代入されます。
3行目の@b=@a; の方はリストコンテキストなので、普通の配列の代入になります。
最後の要素のインデックスを返すという特別な変数を使います。
各配列ごとに「$#配列名」と言う特別な変数があります。
例えば@aという配列なら$#aという変数です。
これが並列の最後の要素のインデックスになります。
これを利用すると$#a+1 が要素の個数になります。
$count=@party;
$count=$#party+1;
$#party+1 のよいところはコンテキストに依存しないところです。
$#配列名 と言う変数は読み出すだけでなく、書き込むことも出来ます。
$#配列名 に書き込むとその値が最後のインデックスになるように配列の長さが変わります。
例えば
@a=(1,2,3,4,5);
$#a=2;
を実行すると@aは(1,2,3)の3つの要素だけになります。
4,5は消えてしまいます。
****************************
配列の全要素について
配列の善要素について何かするというのは、良くある繰り返しのパターンです。
@partyの全要素をプリントしてみましょう。
for($i=0; $i<@party; $i++){
print"$i: $party[$i]\n";
}
次のように書いても構いません。
for($i=0; $i<=$#party; $i++){
print"$i: $party[$i]\n";
}
繰り返しの中でインデックスの値(上の例では$i)を使いたい場合は、このfor文を使います。
もう一つforeachという構文があります。
foreachは配列の全要素について指定した変数(下の例では$name)に要素を代入して
繰り返して実行してくれると言う構文です。
foreach $name(@party){
print"$name\n";
}
変数の指定を省略すると$_が使われます。
従って次と同じです。
foreach(@party){
print"$_\n";
}
foreachとforは同じ意味です。
for(@party){
print"$_\n";
}
でも全く一緒です。
インデックスを使う方はfor
使わない方はforeachにしてもよいです。
******************************************