Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.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_Hash_Key - Fatal编程技术网

Perl 即使未设置密钥,哈希也包含密钥

Perl 即使未设置密钥,哈希也包含密钥,perl,hash,key,Perl,Hash,Key,在我的代码中,我创建了一个散列,然后将其传递给一个函数 my %profile_hash = (); getProfileInfo(\%profile_hash, $profile_path); 在函数中,我执行以下操作: sub getProfileInfo{ my %profile_hash = shift; my $profile_path = shift; foreach my $key (keys (%profile_hash)){ pri

在我的代码中,我创建了一个
散列
,然后将其传递给一个函数

my %profile_hash = ();

getProfileInfo(\%profile_hash, $profile_path);
在函数中,我执行以下操作:

sub getProfileInfo{
    my %profile_hash = shift;
    my $profile_path = shift;

    foreach my $key (keys (%profile_hash)){
        print $key;
    }
}
我发现当我打印钥匙时,我得到:

HASH(0x1b64448)

谁能告诉我为什么会发生这种情况?如果在将
键传递给函数之前打印
,则该键将如预期一样为空


感谢您的帮助。

您需要在sub中使用标量来获取传递的哈希引用,然后在循环中对其进行延迟:

sub getProfileInfo{
    my $profile_hash_ref = shift;
    my $profile_path = shift;

    foreach my $key (keys (%{ $profile_hash_ref })){
        print $key;
    }
}

始终
使用严格的
使用警告
。如果你一直在使用它们,你会得到这样一条信息:“引用找到了一个甚至大小的列表”,我一直在使用它们。这是
CGI
脚本的一部分,结果发现这个错误被打印到了我错过的日志中。谢谢toolic。我不知道这个必须取消引用。