2012-01-25 34 views
0

我想從一個哈希中刪除某些鍵/值對,但我得到的全局符號需要顯式包名異常,我不知道如何調試這個。我讀了一些解決方案,但他們都沒有工作。從Perl中刪除鍵/值對結果全局符號需要明確的包名錯誤

my $hash = foo(); 

然後我經過哈希使用此行代碼:

while (my ($key, $value) = each %$hash) 

和我選擇值塊,我不想和儲存所以哈希以這種方式宣告

my @keysArray =(); 

我然後訪問陣列使用此代碼,以便可以通過散列刪除它們以檢索鍵::用於在陣列中這些值被聲明這樣的(當然在循環之前)鍵

for my $key (@keysArray){ 
    delete $hash{$key};# this line of code is causing the problem 
} 

我寫的最後一行是引起全局符號「%hash」的那一行,它需要明確的包名稱異常。

任何修復或我在這裏做錯了什麼。

P.S.我更改了變量名稱並刪除了其他內部代碼,但格式相同。

請幫忙! 謝謝。

+0

從看來你正在做的錯誤消息 「使用嚴格的;」 ,這是一件好事。我假設你正在做「使用警告」;以及。 – zgpmax

+0

沒有警告,但我得到了我正在尋找的答案(它在下面)。 – Nabou

回答

9

delete $hash{$key}%hash刪除條目。沒有%hash。相反,您需要編寫delete $hash->{$key},從%$hash刪除條目。

我建議perldoc perlreftut回答所有關於參考和如何使用它們的問題。

3

您已聲明$hash(對散列的標量引用)而不是%hash(散列)。改爲嘗試使用delete $hash->{$key}

1

你(修復)代碼:

for my $key (@keysArray) { 
    delete $hash->{$key}; 
} 

可縮短至

for my $key (@keysArray) { 
    delete $$hash{$key}; 
} 

或者乾脆

delete @$hash{@keysArray}; 
相關問題