【问题标题】:try to print mixed hash element in perl尝试在 perl 中打印混合哈希元素
【发布时间】:2016-04-06 06:22:54
【问题描述】:

我尝试以树的形式打印哈希键和值。我的 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 行使用“strict refs”时,不能使用字符串(“word”)作为 HASH ref。

这里,在第三个键值下不打印。我该怎么做?

【问题讨论】:

  • 因为$hash{third}的值不是hashref,所以%{$hash{third}}是抛出错误。你可以使用if (ref $hash{$line} eq "HASH") ...

标签: perl hash


【解决方案1】:

您不能取消引用字符串($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";
    }
}

【讨论】:

    猜你喜欢
    • 2023-03-08
    • 1970-01-01
    • 2012-04-28
    • 2017-09-30
    • 2016-12-18
    • 2011-10-27
    • 2012-08-10
    • 2012-10-23
    • 1970-01-01
    相关资源
    最近更新 更多