{{tag> note:perl splice}} ---json { "title":"配列を編集する(splice)", "description":"配列を編集する(splice)" } --- \\ ==== 配列を編集する(splice) ==== \\ splice( 配列, 開始位置, 要素数 ) use Data::Dumper; my @a = (1 ,2, 3, 4, 5, 6, 7, 8, 9); @array = splice( @a, 2, 2 ) # [ 3, 4 ] <= [ 1 ,2, _, _, 5, 6, 7, 8, 9 ] # (先頭より2番目から、2つ分の要素を取り出す) @array = splice( @a, -2, 2 ) # [ 8, 9 ] <= [ 1 ,2, 3, 4, 5, 6, 7, _, _ ] # (後方より2番目から、2つ分の要素を取り出す) @array = splice( @a, 2, -2 ) # [ 3, 4, 5, 6, 7 ] <= [ 1 ,2, _, _, _, _, _, 8, 9 ] # (前方より2番目から、後方より2つ分の要素までを取り出す) # 開始位置=(先頭より2+1つ目) 要素数=(後方より2+1つ目) @array = splice( @a, -2, -2 ) # 操作失敗(※範囲が正しくない) ※取り出したデータは返り値となり、取り出されたデータは取り出し元から削除される。 === ケース1 === 配列の内容を別の配列に移動してみる。\\ my @b = splice(@a); # @aの要素を全て@bへ移動 print "[\@a]\n".Dumper(@a)."\n"; print "[\@b]\n".Dumper(@b)."\n"; 結果 [@a] # コピー元(空になっている) [@b] # コピー先 $VAR1 = 1; $VAR2 = 2; $VAR3 = 3; $VAR4 = 4; $VAR5 = 5; $VAR6 = 6; $VAR7 = 7; $VAR8 = 8; $VAR9 = 9; === ケース2 === 一部データを抜き出し別の配列に移動する。\\ my @a = splice(@b, 0, 5); # 前方より4番目,5個分をデータを取り出す print "[\@a]\n".Dumper(@a)."\n"; print "[\@b]\n".Dumper(@b)."\n"; 結果 [@a] $VAR1 = 1; $VAR2 = 2; $VAR3 = 3; $VAR4 = 4; $VAR5 = 5; [@b] $VAR1 = 6; $VAR2 = 7; $VAR3 = 8; $VAR4 = 9; ~~DISCUSSION~~