配列

配列とはリストを保持する変数のこと。
配列全体は、@配列名、として表す。

@nums = (1..100);
@chars = qw/ a b c d e /;


配列はリストの要素にはならない。
配列名は、その配列が持っているリストに置きかえられる

@chars qw/ b c /;
@list = ('a', @chars, 'd'); # ('a', 'b', 'c', 'd')と同じ

配列の要素にアクセスする

配列やリストの要素は、0から始まり1ずつ増加する整数によって
添え字付けされている。
配列の各要素にアクセスするには、その添え字を使う。

print $list[0];
$list[4] = "hoge";

配列の各要素を表す場合は、@でなく、$をつける。
$listと$list[0]は完全に別物なので、同じプログラムで、
$listというスカラー変数を使うことも可能。
ただし、ややこしいので、止めた方がいい。


添え字には式を使うこともできる。

$list[3 * 5] = "hoge";
$n = 5;
$list[$n - 2] = 100;


添え字に小数を使った場合は、切り捨てで整数に変換される。

$list[4.6] = "hoge"; # これと
$list[4] = "hoge";   # これは同じ


配列の末尾より後ろにある要素に値を代入すると、配列は
自動的に拡張される。

@list (1..10);  # @listの要素数は10
$list[20] = 20; # @listの要素数は21

添え字は0から始まるので、末尾の要素の添え字が20なら、
素数は21になる。
また、途中の要素にはundefが代入される。

配列の特別なインデクス

インデクスとは添え字のこと。
配列の末尾の要素のインデクスは、$#配列名か-1で表される。

@list = (1..10);
print $list[9];      # 3つのprint文は全て等価
print $list[$#list];
print $list[-1];     # これが一番楽

-2は真ん中の、-3は最初の要素のインデクスを表すが、
誰も使わないらしい。

参考書にそう書いてあったのですが、コメント欄で間違いを
指摘されたので確認。

#!/usr/bin/perl -w
@list qw/ a b c d e /;
print "$list[-2]\n";
print "$list[-3]\n";
d
c

H.I.さんの仰るとおり、-2は後ろから2番目の、-3は後ろから
3番目の要素のインデクスです。
本に書いてあることを鵜呑みにしてはいけないですね。
次からは、実際にプログラムを動かして確認するようにします。