splice ARRAY,OFFSET,LENGTH,LIST
splice ARRAY,OFFSET,LENGTH
splice ARRAY,OFFSET
splice ARRAY

移除陣列中由 OFFSET 和 LENGTH 指定的元素,並用 LIST 中的元素(如果有)取代它們。在列表內容中,傳回從陣列中移除的元素。在標量內容中,傳回最後一個移除的元素,或 undef(如果沒有移除任何元素)。陣列會根據需要增長或縮小。如果 OFFSET 為負數,則它會從陣列的尾端開始。如果省略 LENGTH,則從 OFFSET 開始移除所有內容。如果 LENGTH 為負數,則從 OFFSET 開始移除元素,但陣列尾端的 -LENGTH 元素除外。如果 OFFSET 和 LENGTH 都省略,則移除所有內容。如果 OFFSET 超過陣列的尾端,且提供了 LENGTH,Perl 會發出警告,並在陣列的尾端進行拼接。

以下等價關係成立(假設 $#a >= $i

push(@a,$x,$y)      splice(@a,@a,0,$x,$y)
pop(@a)             splice(@a,-1)
shift(@a)           splice(@a,0,1)
unshift(@a,$x,$y)   splice(@a,0,0,$x,$y)
$a[$i] = $y         splice(@a,$i,1,$y)

splice 可用於實作 n 元佇列處理等功能

sub nary_print {
  my $n = shift;
  while (my @next_n = splice @_, 0, $n) {
    say join q{ -- }, @next_n;
  }
}

nary_print(3, qw(a b c d e f g h));
# prints:
#   a -- b -- c
#   d -- e -- f
#   g -- h

從 Perl 5.14 開始,一個實驗性功能允許 splice 採用標量表達式。此實驗被視為不成功,並在 Perl 5.24 中移除。