splice

配列の指定位置に要素を追加または指定位置に要素を削除する

構文

解説

splice は、配列 ARRAY から OFFSETLENGTH で指定された範囲の要素を削除し、 LIST が与えられていれば、その LIST で削除した要素と置き換えます。 OFFSET は配列の要素の位置を表し 0 から始まります。 LENGTHOFFEST からの個数を意味します。

リストコンテキスト (戻り値をリストで受け取る状況) では、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

OFFSETLENGTH も省略された場合は、すべての要素が削除されます。

my @array = ( 1, 2, 3, 4, 5 );
splice @array;
print join( ', ', @array );    # @array は空の配列になります