Perl:在splice()类型中,arg1必须是数组,不能是标量解除引用。怎么修?

时间:2010-05-30 00:43:22

标签: 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后,它不会将索引移位,因此我无法继续处理其他内容。

然后我用Googled找到了splice()子程序,它一次性删除和移位。

但错误反馈告诉我

“拼接的arg 1的类型必须是数组(不是标量取消引用)......”

然后我尝试了这样的事情:

splice(@{$$ref}, $i, 1);

这导致了另一个错误:

“不是...的SCALAR参考(指向该行)”

所以我有点疑惑,我怎么能处理这个问题?

如果可能,我不想在解决方案中使用任何CPAN或其他库。

1 个答案:

答案 0 :(得分:2)

splice(@$ref, $i, 1);  # this works...

啊......我昨晚(凌晨2点)遇到了这个问题,所以我的能量被烧掉了......

现在我更清楚地看到了Perl中的魔力:)

对这么简单的问题感到抱歉。