5部 関数リファレンス

splice

splice ARRAY, OFFSET, [LENGTH, LIST]



配列ARRAYOFFSET番目の要素からLENGTH分を取り除き、LISTが指定されていれば、それを代わりに挿入します。最後に配列から取り除かれた要素を返します。
spliceは、呼び出されたコンテキストによって異なる値を返します。リストコンテキストでは、spliceは配列から削除した要素のリストを返します。スカラーコンテキストで呼び出すと、削除した最後の要素を返します。

spliceの使い方

@list = (a, b, c, d, e, f, g);
splice( @list, 1, 2, "X", "X", "X" );
print @list, "\n";
> aXXXdefg 

上記では、インデックスの1に当たる要素から2個の要素(b と c)を削除して、代わりに3つの"X"を挿入しています。

要素を削除せずに挿入だけしたいときは長さ指定のLENGTHを 0 にします。

@list = (a, b, c, d, e, f, g);
splice( @list , 1, 0, "X", "X", "X" );
print @list, "\n";
> aXXXbcdefg 

要素の削除だけを行いたいときは挿入する値LISTを省略します。

@list = (a, b, c, d, e, f, g);
splice( @list , 1, 2 );
print @list, "\n";
> adefg 

引数OFFSETに負の数を指定すると、配列の末尾から数えてOFFSET番目の要素が指定されたことになります。

@list = (a, b, c, d, e, f, g);
splice( @list , -3, 2 );
print @list, "\n";
> abcdg

LENGTHを省略すると、OFFSET以降のすべての要素を取り除けます。

@list = (a, b, c, d, e, f, g);
splice( @list , -3);
print @list, "\n";
> abcd 

LENGTHに負の数を指定すると、配列の最後のLENGTH個の要素を除いた部分を指定したことになります。

@list = (a, b, c, d, e, f, g);
splice( @list ,1, -3, "X");
print @list, "\n";
> aXefg 

関連記事