配列の指定位置に要素を追加または指定位置に要素を削除する
splice
は、配列 ARRAY から OFFSET と LENGTH で指定された範囲の要素を削除し、
LIST が与えられていれば、その LIST で削除した要素と置き換えます。
OFFSET は配列の要素の位置を表し 0 から始まります。
LENGTH は OFFEST からの個数を意味します。
リストコンテキスト (戻り値をリストで受け取る状況) では、splice
は配列から削除した要素を返します。
スカラーコンテキスト (戻り値をスカラーで受け取る状況) では、splice
は削除した最後の要素を返します。
何も削除されなかった場合は undef を返します。
次のサンプルコードは 5 つの要素を持つ配列のうち、2 番目 (オフセットは 1) から 2 つの要素を削除します。
my @array = ( 1, 2, 3, 4, 5 );
splice @array, 1, 2;
print join( ', ', @array ); # 1, 4, 5
次のサンプルは 2 つの要素を削除し、その場所に 3 つの要素 11, 12, 13 を挿入します。
my @array = ( 1, 2, 3, 4, 5 );
splice @array, 1, 2, 11, 12, 13;
print join( ', ', @array ); # 1, 11, 12, 13, 4, 5
前述の例のように、置き換える要素をリストとして与えるとコードが読みづらくなります。 この置き換える要素を配列として指定すると、コードが読みやすくなるのではないでしょうか。
my @array = ( 1, 2, 3, 4, 5 );
splice @array, 1, 2, (11, 12, 13);
print join( ', ', @array ); # 1, 11, 12, 13, 4, 5
もし LENGTH を省略すると、OFFEST 以降の要素はすべて削除されます。
my @array = ( 1, 2, 3, 4, 5 );
splice @array, 3;
print join( ', ', @array ); # 1, 2, 3
OFFSET に負の値を指定すると、配列の後ろから数えることになります。
my @array = ( 1, 2, 3, 4, 5 );
splice @array, -2;
print join( ', ', @array ); # 1, 2, 3
OFFSET も LENGTH も省略された場合は、すべての要素が削除されます。
my @array = ( 1, 2, 3, 4, 5 );
splice @array;
print join( ', ', @array ); # @array は空の配列になります