【问题标题】:Perl: Check if hashref key points to a value or another hashrefPerl:检查 hashref 键是否指向一个值或另一个 hashref
【发布时间】:2026-02-01 07:50:01
【问题描述】:

鉴于以下两个 hashref 示例,以下将产生不同的输出,具体取决于 OrganizationName 键是包含值还是 Hash

示例 1:

$VAR1 = {
          'Address2' => {},
          'OrganizationName' => 'EXISTS',
          'Fax' => {}
        };

示例 2:

$VAR1 = {
          'Address2' => {},
          'OrganizationName' => {},
          'Fax' => {}
        };

对于第一个哈希:

my $org = $hashref->{'OrganizationName'};
print $org;

返回:组织名称

对于第二个哈希:

my $org = $hashref->{'OrganizationName'};
print $org;

返回:HASH(0x1ae17e0)

这是因为当“非空”键包含值时,“空”组织名称键包含哈希。

那么我如何测试 OrganizationName 键是否包含哈希,如果不继续?我想在不循环遍历Hash 中的键的情况下执行此操作,因为有很多键,而且似乎只有一个键是不必要的。

提前感谢您的帮助。

【问题讨论】:

    标签: perl hash


    【解决方案1】:

    它不包含散列,它包含对散列的引用。您可以使用ref 轻松检查值是否为引用:

    if ( ref $hashref->{OrganizationName} ) {
       print "OrganizationName contains a reference\n";
    }
    
    if ( ref $hashref->{OrganizationName} eq 'HASH' ) {
       print "OrganizationName contains a reference to a hash\n";
    }
    

    【讨论】:

    • 非常好的答案。学到了一些新东西,解释很清楚。非常感谢!
    • if (ref $hashref->{OrganizationName} eq 'HASH') 足以进行 hashref 测试。
    • @mpapec 如果字符串不是参考,这将引发关于将字符串与undef 进行比较的警告。假设您启用了use warnings
    • @mpapec 你是对的。我养成这个习惯一定是有原因的,但如果我不记得了,我就无法证明它是正确的。
    最近更新 更多