Perl splice 函数

字数 240阅读 138

语法

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

功能

从ARRAY数组中OFFSET处向后删除LENGTH个元素,如果LIST参数存在,则用LIST在ARRAY中替换被删除掉的元素。在列表上下文中返回被删除元素的列表,在标量上下文中返回被删除的最后一个元素,如果没有删除任何元素则返回undef。

  1. 如果OFFSET主负,则从数组末尾开始向前计数-OFFSET为其起始位置。
  2. 如果省略LENGTH,则删除从OFFSET之后的所有元素。
  3. 如果LENGTH为负,则从数组末尾开始计数LENGTH个元素,然后从OFFSET位置到LENGTH位置之间的元素会被删除。
  4. 如果省略OFFSET和LENGTH,则删除所有内容。
  5. 如果OFFSET超出阵列的末尾,并且提供了一个LENGTH,则Perl发出警告,并在数组的末尾进行拼接。

例子

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)

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

推荐阅读更多精彩内容