如何在perl中检查哈希是否为空

如何在perl中检查哈希是否为空,perl,hash,Perl,Hash,我使用以下代码检查哈希是否为空。有更好的方法吗?使用安全吗 if (!keys %hash) { print "Empty";} 会很好用的 发件人: 如果在标量上下文中计算哈希值,则如果哈希值为 是空的。如果存在任何键/值对,则返回true;更多 确切地说,返回的值是一个由 已用桶数和已分配桶数,用 斜杠 更简单: if (!%hash) { print "Empty"; } !!施加标量上下文,在标量上下文中计算的哈希返回: false如果存在零键(文档中未定义,但实验返

我使用以下代码检查哈希是否为空。有更好的方法吗?使用安全吗

if (!keys %hash) { print "Empty";} 
会很好用的

发件人:

如果在标量上下文中计算哈希值,则如果哈希值为 是空的。如果存在任何键/值对,则返回true;更多 确切地说,返回的值是一个由 已用桶数和已分配桶数,用 斜杠

更简单:

if (!%hash) { 
    print "Empty";
} 
!!施加标量上下文,在标量上下文中计算的哈希返回:

  • false
    如果存在零键(文档中未定义,但实验返回
    0

  • 一个字符串,表示有多少已使用/分配的存储桶用于>0个键,当然不会为false(例如“3/6”)

有一个错误导致标量上下文中的绑定哈希始终返回false。这只虫子被杀死了。如果您关心向后兼容性,那么我会坚持使用
If(!keys%hash)
。否则,按照其他人的建议使用
如果(!%hash)

更好是一个主观术语。然而,我认为更容易理解的代码可以被描述为“更好”。因此,我的结论是
!键%hash
更好,因为编写perl代码的每个人都知道该代码的功能和工作原理<代码>!%哈希(hash)至少是我必须查找的东西,以确保它是否真的有效,或者只是看起来有效。(原因是标量上下文中散列的返回值相当混乱,而标量上下文中的数组行为是众所周知且经常使用的。)

还有,
!密钥%hash
是安全的


因此,没有更好或更安全的方法来检查散列是否为空。

不,它不会返回“false”,这将是一个真值。它返回零。如果您觉得您的问题已经得到了回答,您应该通过单击问题左侧的复选标记来接受答案。对我有用:)它似乎比
键%hash
慢得多。
if (!%hash) { 
    print "Empty";
}