my @writers = qw( Horace Ovid Virgil Asimov Heinlein Dante );
my @contemporary = splice @writers, 3, 2;
print join(' ', @contemporary);
输出
Asimov Heinlein
my @writers = qw( Horace Ovid Virgil Asimov Heinlein Dante );
splice @writers, 3, 2;
print join(' ', @writers); # Horace Ovid Virgil Dante
输出
Horace Ovid Virgil Dante
这些脚本之间有什么区别。为什么它显示不同的输出?
答案 0 :(得分:1)
这里
my @contemporary = splice @writers, 3, 2;
print join(' ', @contemporary);
它返回已删除的元素
在这里
splice @writers,3,2;
print join(' ', @writers)
它只是打印数组的元素
并以标量上下文为例
my $contemporary = splice @writers, 3, 2;
print $contemporary;
它将打印已删除的最后一个元素
来自perldoc
从数组中删除OFFSET和LENGTH指定的元素,并将其替换为LIST的元素(如果有)。 在列表上下文中,返回从数组中删除的元素。在标量上下文中,返回删除的最后一个元素,如果没有删除元素,则返回undef。阵列会根据需要增大或缩小。如果OFFSET是负数,则它从数组的末尾开始。如果省略LENGTH,则从OFFSET开始删除所有内容。如果LENGTH为负数,则从OFFSET向前移除元素,但数组末尾的-LENGTH元素除外。如果省略OFFSET和LENGTH,则删除所有内容。如果OFFSET超出了数组的末尾,Perl会发出警告,并在数组的末尾进行拼接。