如何检查一个散列在Perl中是否为空
我使用下面的代码来检查散列是否为空。 有没有更好的方法,这是安全的使用?
if (!keys %hash) { print "Empty";}  if (%hash) 
将工作得很好。
来自perldoc perldata :
如果您在标量上下文中计算散列值,则散列值为空时返回false。 如果有任何键/值对,则返回true; 更确切地说,返回的值是一个string,由使用的桶数和分配的桶数组成,用斜杠分隔。
 有一个错误导致标量环境中的哈希值总是返回false。 该错误在5.8.5中修复 。 如果你担心向后兼容性,我会坚持if( !keys %hash ) 。 否则,按照其他人的build议使用if( !%hash ) 。 
更简单:
 if (!%hash) { print "Empty"; } 
! 施加标量上下文,并且在标量上下文中评估哈希返回:
- 
如果零键(在文档中没有定义,但实验返回 0则为false
- 
一个string,表示有多less使用/分配的桶被用于> 0键,当然这不会是错误的(例如“3/6”) 
  “更好”是一个主观的术语。 不过,我认为那些比较容易理解的代码可以被描述为“更好”。 由于这个原因,我得出这样的结论!keys %hash是更好的,因为每个人写Perl代码将知道这个代码是什么,它的工作原理。  !%hash是至less我不得不查找,以确保它是否真的起作用或只看起来像它会工作。  (原因是标量上下文中的散列的返回值相当混乱,而标量上下文中的数组行为是众所周知的并且经常使用)。 
 另外, !keys %hash是保存的。 
所以不,没有更好或更省钱的方法来检查一个散列是否为空。