Perl - 我们如何删除和拼接数组的值?

时间:2014-04-17 02:50:14

标签: perl

我知道如何删除并将值拼接到数组。目前我的代码是这样的。

my $newDate ="$dayStr/$monthStr/$yearStr";
delete @CONTENTS[9];
splice(@CONTENTS,9,1,$newDate);

这可以删除并拼接$newDate(DATE)到第10个位置。但是,我遇到的问题是由于我的用户设置的文件格式,$newDATE(DATE)并不总是位于第10位。幸运的是,如果从后面算起,$newDate(DATE)总是固定在第4位。

有关如何执行此操作的任何更改解决方案?如何从后面计算数组,以便我可以到达第4位。

我的预期结果是,如果我们从后面计算,则通过到达第4个位置来删除并将值拼接到数组。

感谢您查看,评论和回答。

3 个答案:

答案 0 :(得分:3)

splice允许从数组末尾开始的负偏移:

my @array = (1..10);
splice @array, -4, 1, ('foo');
print join(',', @array), "\n";

输出:

1,2,3,4,5,6,foo,8,9,10

答案 1 :(得分:1)

这两个命令都允许您使用负索引从数组末尾开始计数。您的代码也删除了@CONTENTS数组中的两个元素。 delete命令删除第9个位置的内容,然后splice命令删除移动到第9个位置的内容,并用$ newDate替换它。

CORRECTION:删除不会删除Miller指出的数组元素。它只删除该值并使其成为undef。这是不必要的,因为您正在使用splice命令删除索引。

这是带负索引的代码。

my $newDate ="$dayStr/$monthStr/$yearStr";
delete @CONTENTS[-4];
splice(@CONTENTS,-4,1,$newDate);

拼接:http://perldoc.perl.org/functions/splice.html

答案 2 :(得分:0)

其他人已提到使用splice,但作为进一步的评论:不要在数组元素上使用delete。它不应该起作用,它不能可靠或明确地工作。它只适用于哈希。