从perl中删除键/值对会导致全局符号,需要显式的包名错误
我试图从散列中删除某些键/值对,但是我得到了全局符号需要显式包名异常,我不知道如何调试它。我读了一些解决方案,但似乎都不管用。因此散列以这种方式声明:从perl中删除键/值对会导致全局符号,需要显式的包名错误,perl,variables,hash,cgi,Perl,Variables,Hash,Cgi,我试图从散列中删除某些键/值对,但是我得到了全局符号需要显式包名异常,我不知道如何调试它。我读了一些解决方案,但似乎都不管用。因此散列以这种方式声明: my $hash = foo(); 然后我使用以下代码行遍历哈希: while (my ($key, $value) = each %$hash) 在块中,我选择我不想要的值,并将这些值的键存储在这样声明的数组中(当然是在循环之前): 然后,我使用以下代码访问数组以检索密钥,以便从散列中删除它们: for my $key (@keysArra
my $hash = foo();
然后我使用以下代码行遍历哈希:
while (my ($key, $value) = each %$hash)
在块中,我选择我不想要的值,并将这些值的键存储在这样声明的数组中(当然是在循环之前):
然后,我使用以下代码访问数组以检索密钥,以便从散列中删除它们:
for my $key (@keysArray){
delete $hash{$key};# this line of code is causing the problem
}
我写的最后一行是导致全局符号“%hash”需要显式包名异常的那一行
有什么问题吗,或者我做错了什么
另外,我更改了变量名并删除了其他内部代码,但格式相同
救命啊!
谢谢。您声明了
$hash
(对散列的标量引用),但没有声明%hash
(散列)。尝试执行delete$hash->{$key}
。delete$hash{$key}
从%hash
中删除一个条目。没有%hash
。相反,您需要编写delete$hash->{$key}
,它从%$hash
中删除一个条目
我建议您回答所有关于参考资料以及如何使用它们的问题。您的(修复的)代码:
可以缩短为
for my $key (@keysArray) {
delete $$hash{$key};
}
或者干脆
delete @$hash{@keysArray};
从错误消息中可以看出,您正在执行“use strict;”,这是一件好事。我想你也在做“使用警告”;没有警告,但我得到了我想要的答案(见下文)。
for my $key (@keysArray) {
delete $$hash{$key};
}
delete @$hash{@keysArray};