为什么Perl会警告我使用伪哈希?

4

Perl警告我在程序中使用伪哈希:

伪哈希已被弃用

如何修改以下代码以不使用伪哈希

    foreach my $hash (@arrayOfHash) {
            print keys %{$hash};
    }
2个回答

10

问题不在那段代码中。问题在于@arrayOfHash实际上包含的是数组引用,而不是哈希引用。

如果由于某种原因你无法修复@arrayOfHash,你可以通过以下方式解决:

foreach my $hash (@arrayOfHash) {
     my %hash = @$hash;
     print keys %hash;
}

1
“绕过它”这个说法有点太宽泛了,因为我们和提问者似乎都不知道@arrayOfHash中到底是什么。首先要搞清楚这一点,然后再采取行动。你的代码只能在一个有限的错误情况下有所帮助。 - ysth

5

您应该始终发布完整的示例代码.....

不确定您正在做什么,但您可能会混合使用数组和数组引用以及哈希和哈希引用。我通常只使用引用,因为我喜欢语法更好,也喜欢保持一致性:

use strict;
use warnings;

my($arrayrefOfHashrefs) = [
                           {foo => 'bar',
                            bar => 'baz'},
                           {Hello => 'world'},
                          ];

foreach my $href (@$arrayrefOfHashrefs) {
    print join("\n", keys %$href);
    print "\n\n";
}

将会输出:

C:\Temp>perl foo.pl
bar
foo

Hello

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接