Perl 如何删除空哈希实体?

Perl 如何删除空哈希实体?,perl,Perl,我试图找出如何删除返回值为{}的散列项 我在做这样的事情 if (ref($snapshots{"ID\:$id"}) eq "{}") { print "ID $id hash no snapshots\n"; } 它似乎不起作用。有什么想法吗?给定的{},ref将是“散列”而不是“{}” 什么是!标量…do?@soligins:它被解析为!标量(键(%{$snapshots{“ID\:$ID”}}))keys返回键列表,在标量上下文中,该列表将转换为键数。如果密钥数为0,即哈希为空

我试图找出如何删除返回值为
{}
的散列项

我在做这样的事情

if (ref($snapshots{"ID\:$id"}) eq "{}") {
    print "ID $id hash no snapshots\n";
}

它似乎不起作用。有什么想法吗?

给定的
{}
ref
将是
“散列”
而不是
“{}”


什么是
!标量…
do?@soligins:它被解析为
!标量(键(%{$snapshots{“ID\:$ID”}}))
keys
返回键列表,在标量上下文中,该列表将转换为键数。如果密钥数为0,即哈希为空,则否定为真。我明白了,这是有意义的。谢谢你的解释,我不喜欢使用我不懂的代码。它测试散列是空的。在list context
keys
中,通过强制使用标量上下文返回哈希的键,可以获得其元素量。然后它测试不为false,也就是在这里,与0(与
..&&(标量键%{$snapshots{“ID\:$ID”}}==0)
您不必使用
。如果哈希本身为空,则在标量上下文中计算为false值。因此
%{$snapshot{“ID\:$ID”}}
足以测试空值。我逃避了
,因为……我认为我必须这么做,我想我没有?
if (ref $snapshots{"ID\:$id"} eq 'HASH' && !scalar keys %{$snapshots{"ID\:$id"}}) {
    delete $snapshots{"ID\:$id"};
}