移除陣列中由 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 中移除。