2012-01-25 38 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}; 
相关问题