在perl脚本中拼接

时间:2013-12-23 12:34:03

标签: perl splice

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

这些脚本之间有什么区别。为什么它显示不同的输出?

1 个答案:

答案 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会发出警告,并在数组的末尾进行拼接。