2010-05-30 19 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

相關問題