配列に対して push
, pop
, shift
, unshift
などのメソッドを使用すると、要素を追加したり取り出したりすることができます。
push @arr, 10; # 配列の末尾へ 10 を追加
unshift @arr, 10; # 配列の先頭へ 10 を追加
my $val = pop @arr; # 配列の末尾から要素を 1 つ取り出す
my $val = shift @arr; # 配列の先頭から要素を 1 つ取り出す
push
や unshift
で追加する要素は、リストコンテキストで評価されるため、リストの要素をまとめて追加することができます。
my @arr = (1, 2, 3);
push @arr, (4, 5, 6); # @arr の値は (1, 2, 3, 4, 5, 6)
pop
あるいは shift
するときに配列が空の場合、undef
が得られます。
splice
を使用すると、配列の一部を取り出したり、置換したりすることができます。
@arr1 = ('1', '2', '3', '4', '5');
@arr2 = splice(@arr1, 2, 2); # @arr1 = ('3', '4'), @arr1 = ('1', '2', '5')
第3引数を省略すると、 末尾までの要素を削除します。
@arr1 = ('1', '2', '3', '4', '5');
@arr2 = splice(@arr1, 2); # @arr2 = ('3', '4', '5'), @arr1 = ('1', '2')
第2引数に負の値を指定すると、後ろから数えたインデックスで指定することができます。
例えば、次のスクリプトはファイルの末尾 10 行を表示します(UNIX の tail
コマンドと同じ動作をするスクリプトです)。
@lines = <>;
print splice(@lines, -10);
第4引数以降に任意の要素を指定しておくと、削除した要素の位置に新しく挿入されます。 次の例では、配列に ‘abc’ という要素を挿入しています(要素の削除数は0と指定しているので、置換ではなく、挿入となります)。
@arr = ('1', '2', '3', '4');
splice(@arr, 2, 0, 'abc'); # @arr = ('1', '2', 'abc', '3', '4')