Perl:In splice()中arg1的类型必须是数组,不能是标量解引用。如何修复?
我试图理解Perl中的引用/解引用系统 我试图通过使用引用删除元素:Perl:In splice()中arg1的类型必须是数组,不能是标量解引用。如何修复?,perl,Perl,我试图理解Perl中的引用/解引用系统 我试图通过使用引用删除元素: my $ref= \@{$collection{$_[0]}}; # delete($$ref[$i]); # delete works, I've tested that already splice($$ref, $i, 1); # this wouldn't do. 我首先尝试了delete()子例程,它可以工作;但是,它不会将删除的元素后的索引向前移动1,因此我无法继续处理其他内容 然后我在谷歌上搜索并找
my $ref= \@{$collection{$_[0]}};
# delete($$ref[$i]); # delete works, I've tested that already
splice($$ref, $i, 1); # this wouldn't do.
我首先尝试了delete()子例程,它可以工作;但是,它不会将删除的元素后的索引向前移动1,因此我无法继续处理其他内容
然后我在谷歌上搜索并找到了splice()子例程,它可以一次删除和移位
但是错误反馈告诉我
“要拼接的arg 1的类型必须是数组(而不是标量解引用)
然后我尝试了这样的方法:
splice(@{$$ref}, $i, 1);
这导致了另一个类似以下的错误:
splice(@{$$ref}, $i, 1);
“不是位于…(指向该行)的标量引用”
所以我有点困惑,我怎么处理这个问题呢
如果可能的话,我宁愿不使用任何CPAN或附加库来解决这个问题
splice(@$ref, $i, 1); # this works...
啊。。。我昨晚(凌晨2点)遇到了这个问题,所以我的精力都消耗殆尽了
现在我更清楚地看到了Perl的魔力:)
很抱歉问这么简单的问题。
@{$ref}
也可以@$ref
更常见,但是如果您有一个更复杂的表达式(而不仅仅是一个变量),则需要大括号。