尝试在perl中打印混合哈希元素

时间:2016-01-01 22:25:29

标签: perl hash

我尝试以树形式打印哈希键和值。我的perl代码如下所示。

use strict ;
use warnings ;
my %hash = (
    first => {
            a => "one",
            b => "two",
            c => "three",
    },
    second => {
            d => "four",
            e => "five",
            f => "six",
    },
    third => "word",
);

foreach my $line (keys %hash) {
    print "$line: \n";
    foreach my $elem (keys %{$hash{$line}}) {
        print "  $elem: " . $hash{$line}->{$elem} . "\n";
    }
}

输出错误信息: 第二:   d:四   f:六   e:五 第三: 在C:\ Users \ Dell \ Music \ PerlPrac \ pracHash \ hshofhsh_net.pl第19行使用“严格引用”时,不能使用字符串(“word”)作为HASH引用。

这里,第三个键值不打印。我怎么能这样做?

1 个答案:

答案 0 :(得分:4)

您无法取消引用字符串($hash{third},即word)。您可以使用ref来测试特定标量是否为引用:

for my $line (keys %hash) {
    print "$line: \n";
    if ('HASH' eq ref $hash{$line}) {
        for my $elem (keys %{ $hash{$line} }) {
            print "  $elem: $hash{$line}{$elem}\n";
        }
    } else {
        print "  $hash{$line}\n";
    }
}