2010-05-30 41 views
2

我想了解Perl中的引用/取消引用系统。Perl:在splice()中,arg1的类型必须是数组,不能是标量解引用。怎么修?

我所试图做的是通过引用删除元素:

my $ref= \@{$collection{$_[0]}}; 
# delete($$ref[$i]); # delete works, I've tested that already 
splice($$ref, $i, 1); # this wouldn't do. 

我第一次尝试删除()子程序,它的工作原理;然而,它并没有将被移除的元素向前移动1,所以我不能继续在其他东西上工作。

然后我Google搜索并找到了splice()子程序,它一次删除并移动。

但错误的反馈告诉我,

“ARG 1至拼接类型必须是阵列(未标量解引用)......”

我又试图这样的事情:

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

这导致了这样的另一个错误:

“不是在一个标量引用...(在该行指出)”

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

如果可能的话,我更喜欢不使用任何CPAN或额外的解决方案库。

回答

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

唉唉......我遇到了这个问题,昨晚(凌晨2点),所以我的精力被烧毁了......

现在我看到魔术在Perl多一点清楚:)

对不起,这个简单的问题。

+1

'@ {$ ref}'也可以工作。 '@ $ ref'更常见,但如果你有一个更复杂的表达式(而不是一个变量),你需要大括号。 – cjm 2010-05-30 07:57:54

+0

是的,请参阅http://perlmonks.org/?node=References+quick+reference – ysth 2010-05-30 22:15:15

相关问题