我有一个特定的数组,我想从中移除最后三个元素(常数,因为我想要一个子目录列表,它位于有3个文件的目录中)。
有没有比这更好,更好的解决方案?
my @list = (`ls --group-directories-first`);
pop @list;
pop @list;
pop @list;
答案 0 :(得分:8)
您可以使用splice
:
splice @list, -3;
其中-3
表示距离末尾3的偏移量。这将从偏移量和之后的元素中删除元素。
值得注意的是,解析ls
的输出是一个可怕的想法。您可以使用Perl代码执行完全相同的操作:
my @list = grep -d, glob "*";
-d
是一个文件检查,它检查当前参数是否是目录。
答案 1 :(得分:0)
splice
也是我建议的解决方案。
但是,既然您正在使用数组的结尾并且只想破坏那些尾随元素而不是将它们保存到另一个结构,那么您也可以只编辑最后一个数组索引:
$#list -= 3;
以上是将@list
数组的大小减少了3个元素。这是另一个例子:
my @a = (1..10);
$#a -= 4;
print "@a\n";
# Prints: 1 2 3 4 5 6