我想切片数组以创建一个新数组,其中包含数组中除第一个条目之外的所有条目。 这就是我的尝试:
@arguments = $splittedCommands[1..-1];
这给了我一个空洞的结果。 1应该是第二个条目,-1应该是最后一个,所以为什么这不起作用?
答案 0 :(得分:5)
切片数组时,你应该在数组前面使用@
($
告诉你正在访问数组中的单个标量值),所以
my @arguments = @splittedCommands[ 1 .. $#splittedCommands ];
其次,您的范围应该是-$#splittedCommands .. -1
或1 .. $#splittedCommands
,以后会更加普遍和直接。
答案 1 :(得分:5)
最简单的方法是使用
将其分配到另一个列表中( undef, my @commands ) = @splittedCommands;
此处分配到undef
会丢弃第一个结果,其余部分会进入@commands
另一种方法可能是分配批次然后删除第一个
my @commands = @splittedCommands;
shift @commands;
如果您不再需要保留原始数组,这也可以简化;只需shift
@splittedCommands
关闭{{1}}的第一项,然后直接使用它。
答案 2 :(得分:1)
如果原始数组必须保持原样,那么显而易见的方法似乎是复制整个数组并删除第一个元素。
shift(my @commands = @splittedCommands)
会做得很好