Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl:In splice()中arg1的类型必须是数组,不能是标量解引用。如何修复?_Perl - Fatal编程技术网

Perl:In splice()中arg1的类型必须是数组,不能是标量解引用。如何修复?

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,因此我无法继续处理其他内容 然后我在谷歌上搜索并找

我试图理解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,因此我无法继续处理其他内容

然后我在谷歌上搜索并找到了splice()子例程,它可以一次删除和移位

但是错误反馈告诉我

“要拼接的arg 1的类型必须是数组(而不是标量解引用)

然后我尝试了这样的方法:

splice(@{$$ref}, $i, 1);
这导致了另一个类似以下的错误:

splice(@{$$ref}, $i, 1);
“不是位于…(指向该行)的标量引用”

所以我有点困惑,我怎么处理这个问题呢

如果可能的话,我宁愿不使用任何CPAN或附加库来解决这个问题

splice(@$ref, $i, 1);  # this works...
啊。。。我昨晚(凌晨2点)遇到了这个问题,所以我的精力都消耗殆尽了

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


很抱歉问这么简单的问题。

@{$ref}
也可以
@$ref
更常见,但是如果您有一个更复杂的表达式(而不仅仅是一个变量),则需要大括号。