从数组中移除由 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 中被移除。