splice ARRAY, OFFSET, [LENGTH, LIST]
配列ARRAYのOFFSET番目の要素から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