Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从perl中删除键/值对会导致全局符号,需要显式的包名错误_Perl_Variables_Hash_Cgi - Fatal编程技术网

从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};